【问题标题】:Check argparse argument set, or used default, or overriden检查 argparse 参数集,或使用默认值,或覆盖
【发布时间】: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


【解决方案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'

【讨论】:

  • 非常有趣的解决方案,适用于更复杂的案例,并且有效,但我为我相当简单的案例找到了最简单的解决方案。
猜你喜欢
  • 2014-12-07
  • 2022-01-25
  • 2018-03-26
  • 2021-07-27
  • 2019-11-20
  • 2012-09-09
  • 1970-01-01
  • 2020-03-15
相关资源
最近更新 更多