我想使用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。(此解决方案有一个约束条件:您的选项必须具有默认值。)