检查 argparse 参数集,或使用默认值,或覆盖
Posted
技术标签:
【中文标题】检查 argparse 参数集,或使用默认值,或覆盖【英文标题】:Check argparse argument set, or used default, or overriden 【发布时间】:2016-08-14 10:11:33 【问题描述】:我想实现下一个行为:
python script.py
> my_arg is None
python script.py --my-arg
> my_arg is "default"
python script.py --my-arg some_value
> my_arg is "some_value"
如何为 Argparser 配置这个参数?
到目前为止我已经尝试过:
#!/usr/bin/env python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--my-argument', nargs='?', default='default')
args = parser.parse_args()
print(args.my_argument)
但是对于test.py
,我有default
【问题讨论】:
Python argparse: default value or specified value的可能重复 【参考方案1】:在这里找到解决方案Python argparse: default value or specified value
我的脚本如下所示:
#!/usr/bin/env python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--my-argument', nargs='?', const='default')
args = parser.parse_args()
print(args.my_argument)
【讨论】:
是的,'nargs=?'使用“默认”和“常量”为您提供这 3 种方式的操作。【参考方案2】:这个怎么样?使用append
动作区分非指定大小写/--my-arg
指定大小写:
>>> import argparse
>>>
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--my-arg', action='append', nargs='?', default=[])
>>> def parse(argv):
... args = parser.parse_args(argv)
... if not args.my_arg:
... return None
... return args.my_arg[0] or 'default'
...
>>> parse([]) # python script.py
>>> parse(['--my-arg']) # python script.py --my-arg
'default'
>>> parse(['--my-arg', 'some_value']) # python script.py --my-arg some_value
'some_value'
【讨论】:
非常有趣的解决方案,适用于更复杂的案例,并且有效,但我为我相当简单的案例找到了最简单的解决方案。以上是关于检查 argparse 参数集,或使用默认值,或覆盖的主要内容,如果未能解决你的问题,请参考以下文章