我想使用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("")
将evalute改为False
。
如何让argparse解析"False"
、"F"
,以及它们的小写变量False
?
我认为一个更规范的方法是通过:
以及
argparse
很好地支持此版本:当然,如果您真的需要
--arg <True|False>
版本,可以将ast.literal_eval
作为“类型”传递,或者传递用户定义的函数。。。我推荐mgilson的答案,但有一个相互排斥的组
这样就不能同时使用
--feature
和--no-feature
。以及
但不是
脚本:
如果要设置许多辅助对象,则可以使用此辅助对象:
另一个解决方案使用了前面的建议,但是有来自
argparse
的“正确”解析错误:这对于使用默认值进行切换非常有用;例如
允许我使用:
仍然使用默认值(特定于用户设置)。这种方法的一个(间接相关的)缺点是“nargs”可能捕获一个位置参数——请参见this related question和this argparse bug report。
相关问题 更多 >
编程相关推荐