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

时间:2018-06-20 18:04:00

标签: 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:])

在命令行中,我输入: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

此替代方法确实起作用。有更好的方法吗?

3 个答案:

答案 0 :(得分:4)

您可以将store_falsestore_true参数用于add_argument(请参见the argparse documentation)。例如,如果您希望默认值为True,则可以使用action='store_false'添加参数:

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

如果您运行args.no_data,则False将是python command.py --no-data,而如果运行True而没有python command.py参数,则--no-data将是 Dim Arr()() = {({1, "Document Title", "TITLE", "C"}), ({2, "Company Header1", "HEADER1", "C"})}

答案 1 :(得分:1)

@Service
public class LangSupportImpl implements InitializaingBean, LangSupport{
@Resource(name= "supportedLang")
private String twoLetterSupportedLang;
public getTwoLetterSupportedLang(){return this.twoLetterSupportedLang;}
}

答案 2 :(得分:1)

如果参数是布尔值,则应仅使用store_truestore_false,这样,选项本身的存在将导致True或{{1 }}值,而缺少该选项将分别导致FalseFalse值。

来自argparse's documentation

True