Python argparse如何从命令行传递False?

我试图找出如何将布尔值False从命令行传递到argparser。我的原始代码如下所示:


import argparse

parser = 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 = False

else:

   args.data = True

此替代方法确实有效。有一个更好的方法吗?


慕仙森
浏览 329回答 3
3回答

炎炎设计

如果参数是布尔值,则应简单地使用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)

婷婷同学_

def my_bool(s):    return s != 'False'parser.add_argument('-data',default=True,type=my_bool)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python