检查 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 参数集,或使用默认值,或覆盖的主要内容,如果未能解决你的问题,请参考以下文章

ArgParse Python 模块:更改继承参数的默认参数值

argparse详细使用手册

argparse详细使用手册

argparse详细使用手册

打印所有 argparse 参数,包括默认值

参数标志,不使用时为空,不使用时为默认值