检查argparse参数集,或使用默认值,或覆盖原有值。

5
我希望达到以下行为:

我想要实现以下功能:

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,我得到了默认值


可能是Python argparse:默认值或指定值的重复问题。 - Mayra Delgado
2个回答

4

在这里找到了解决方案: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=?' 与 'default' 和 'const' 一起使用可以实现这种三种方式的操作。 - hpaulj

1

这样怎么样?使用 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'

非常有趣的解决方案,适用于更复杂的情况,并且它确实有效,但对于我比较简单的情况,我已经找到了最简单的解决方案。 - dkiselev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接