Python argparse 如何从命令行传递 False?
Posted
技术标签:
【中文标题】Python argparse 如何从命令行传递 False?【英文标题】:Python argparse how to pass False from the command line? 【发布时间】:2018-11-29 22:58:32 【问题描述】:我正在尝试整理如何将布尔值 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
此解决方法确实有效。有没有更好的方法来做到这一点?
【问题讨论】:
bool
将任何非空字符串转换为 True ***.com/questions/715417/…
你也可以使用store_true
查看:***.com/questions/32884131/…
【参考方案1】:
您可以将store_false
或store_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")
如果你运行 python command.py --no-data
和 True
如果你运行 python command.py
没有 --no-data
参数,那么 args.no_data
将是 False
。
【讨论】:
非常感谢! action='store_false' 是我需要的。 使用其他变量名不是更有意义吗?像dest='data'
这样的话,不是args.no_data
是错误的,而是args.data
【参考方案2】:
def my_bool(s):
return s != 'False'
parser.add_argument('-data',default=True,type=my_bool)
【讨论】:
谢谢,这正是我所需要的。我现在不能在我的应用程序中使用标志。【参考方案3】:如果参数是布尔值,您应该简单地使用store_true
或store_false
,这样选项本身的存在将导致True
或False
值,并且不存在该选项将分别产生False
或True
值。
来自argparse's documentation:
>>> 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)
【讨论】:
非常感谢! action='store_false' 是我需要的。 我可以同时使用store_true
和store_false
吗?
启用这两个选项意味着什么?选项的值不能同时是True
和False
。以上是关于Python argparse 如何从命令行传递 False?的主要内容,如果未能解决你的问题,请参考以下文章
python argparse - 在没有命令行的情况下传递值