我想使用argparse解析布尔命令行参数,写为“ --foo True”或“ --foo False”。例如:
my_program --my_boolean_flag False
但是,以下测试代码无法满足我的要求:
import argparse
parser = argparse.ArgumentParser(description="My parser")
parser.add_argument("--my_bool", type=bool)
cmd_line = ["--my_bool", "False"]
parsed_args = parser.parse(cmd_line)
可悲的是,parsed_args.my_bool
计算结果为True
。即使我更改cmd_line
为["--my_bool", ""]
,情况也是如此,这令人惊讶,因为bool("")
评估为False
。
如何获取argparse进行解析"False"
,"F"
以及它们的小写形式是False
什么?
parser.add_argument('--feature', dest='feature', type=lambda x:bool(distutils.util.strtobool(x)))
。使用该选项时,此解决方案将确保bool
值为True
或的类型False
。不使用该选项时,您将得到None
。(distutils.util.strtobool(x)
来自另一个stackoverflow问题)
parser.add_argument('--my_bool', action='store_true', default=False)
parser.add_argument('--feature', dest='feature', default=False, action='store_true')
。此解决方案将确保您始终获得bool
带有True
或值的类型False
。(此解决方案有一个约束条件:您的选项必须具有默认值。)