Luigi:如何从命令行传递“false”给布尔参数?

6

我有一个带有布尔类型参数的 Luigi 任务,默认情况下设置为 True

class MyLuigiTask(luigi.Task):
    my_bool_param = luigi.BoolParameter(default=True) 

当我从终端运行这个任务时,有时候想将该参数设置为False,但得到以下结果:
$ MyLuigiTask --my_bool_param False
error: unrecognized arguments: False  

对于false0一样明显...

我知道我可以将默认设置为False,然后使用标志--my_bool_param将其设置为True,但我更喜欢将默认设置为True

有没有办法这样做,仍然可以从终端传递False


1
似乎这个问题已经有答案了:https://dev59.com/DGUp5IYBdhLWcg3w1qMi - Tom
你觉得创建一个名为 no-my-param 的标记是否可以? - Simon Crane
@Tom,你提供的是argparse的参考资料,而不是Luigi的。你是在暗示它们有完全相同的机制吗? - DalyaG
@SimonCrane 谢谢你的建议,将默认值设为 False 也是可以的。不过我在想,如果将“False”传递给 Luigi,是否有什么我忽略的问题呢? - DalyaG
啊,我明白了。这是答案:https://github.com/spotify/luigi/issues/193#issuecomment-25854409 或者你可以覆盖cmdline_parser: https://luigi.readthedocs.io/en/stable/_modules/luigi/cmdline_parser.html - Tom
1个回答

5

Luigi 文档中找到解决方案:

class MyLuigiTask(luigi.Task):
    my_bool_param = luigi.BoolParameter(
        default=True, 
        parsing=luigi.BoolParameter.EXPLICIT_PARSING)

    def run(self):
        print(self.my_bool_param)

在这里,EXPLICIT_PARSING 告诉 Luigi,通过在终端调用 MyLuigiTask 时添加标志 --my_bool_param false,将被解析为 store_false

现在我们可以有:

$ MyLuigiTask --my_bool_param false
False

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接