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

Joh*_*ley 1 python

我试图找出如何将布尔值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:])
Run Code Online (Sandbox Code Playgroud)

在命令行中,我输入: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')
Run Code Online (Sandbox Code Playgroud)

然后,我对args进行了一些按摩,以获得我真正想要的布尔值:

if re.search("f", args.data, re.I):
   args.data = False
else:
   args.data = True
Run Code Online (Sandbox Code Playgroud)

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

das*_*ell 5

def my_bool(s):
    return s != 'False'

parser.add_argument('-data',default=True,type=my_bool)
Run Code Online (Sandbox Code Playgroud)


blh*_*ing 5

如果一个参数是一个布尔值,你应该简单地使用store_trueor store_false,这样选项本身的存在将导致 a TrueorFalse值,而没有该选项将分别导致 a 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)
Run Code Online (Sandbox Code Playgroud)


orn*_*688 5

您可以使用store_falsestore_true参数add_argument(请参见argparse文档)。例如,如果要使用默认值,True则可以使用添加一个参数action='store_false'

parser.add_argument('--no-data', action='store_false', help='don't use the history file')
Run Code Online (Sandbox Code Playgroud)

然后,args.no_data将是False,如果你运行python command.py --no-dataTrue如果运行python command.py不带--no-data参数。