我试图找出如何将布尔值False从命令行传递到argparser。我的原始代码如下所示:import argparseparser = argparse.ArgumentParser(allow_abbrev=True)parser.add_argument('-data', default=True, type=bool, help='uses the history file')args = parser.parse_args(sys.argv[1:])在命令行中,我输入:python myscript.py -data False在False周围也有单引号和双引号的变体。当我检查args命名空间的内容时,args.data始终为True。因此,我将参数定义从bool更改为str,并使用默认的字符串“ True”,如下所示:parser.add_argument('-data', default="True", type=str, help='uses the history file')然后,我对args进行了一些按摩,以获得我真正想要的布尔值:if re.search("f", args.data, re.I): args.data = Falseelse: args.data = True此替代方法确实有效。有一个更好的方法吗?
3 回答

炎炎设计
TA贡献1808条经验 获得超4个赞
如果参数是布尔值,则应简单地使用store_true或store_false,这样,选项本身的存在将导致TrueorFalse值,而缺少选项则将导致FalseorTrue值。
从argparse的文档中:
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_true')
>>> parser.add_argument('--bar', action='store_false')
>>> parser.add_argument('--baz', action='store_false')
>>> parser.parse_args('--foo --bar'.split())
Namespace(foo=True, bar=False, baz=True)

婷婷同学_
TA贡献1844条经验 获得超8个赞
def my_bool(s):
return s != 'False'
parser.add_argument('-data',default=True,type=my_bool)
添加回答
举报
0/150
提交
取消