Python 2.7 python argparse可选参数的默认值 如果我像下面这样执行脚本,如何确保FOO的默认值是abc
Python 2.7 python argparse可选参数的默认值 如果我像下面这样执行脚本,如何确保FOO的默认值是abc,python-2.7,argparse,Python 2.7,Argparse,/myscript.py--foo-bar-->bar是此处的位置参数。但是args.foo正在考虑将bar作为'--foo'的参数。我希望args.foo成为abc和bar成为位置参数你不能,除非重新修改你的参数 你应该在这里使用两个开关;一个用于打开行为,另一个用于覆盖拾取的默认值。您可以使第二个开关暗示第一个开关: usage: [-h] [--foo FOO] bar 其中,--foo是切换行为的布尔开关,--foo设置允许您设置开关的配置: usage: [-h] [--foo]
/myscript.py--foo-bar
-->bar
是此处的位置参数。但是args.foo
正在考虑将bar
作为'--foo'
的参数。我希望args.foo
成为abc
和bar
成为位置参数你不能,除非重新修改你的参数
你应该在这里使用两个开关;一个用于打开行为,另一个用于覆盖拾取的默认值。您可以使第二个开关暗示第一个开关:
usage: [-h] [--foo FOO] bar
其中,--foo
是切换行为的布尔开关,--foo设置
允许您设置开关的配置:
usage: [-h] [--foo] [--foo-setting FOO] bar
您是否尝试过使用
--
将--foo
参数与条
分开
使用此基本设置:
parser.add_argument('--foo', action='store_true')
parser.add_argument('--foo-setting', help='Set the value for foo, implies --foo is given')
# ...
args = parser.parse_args()
if args.foo_setting is not None:
# default was overridden, explicitly enable the foo feature
args.foo = True
if args.foo:
foo_feature_setting = args.foo_setting or 'default value'
普通的--foo
可以出现在条
之后另一个'('default)是不存在时获取的值,'abc'(the
const`)是存在时获取的值,但为“空”
但正如您所发现的,当--foo
是第一个时,它会使用下面的字符串,不会为位置
参数留下任何内容。换句话说,在处理--foo
时,它没有考虑条
的未来需求
如果我再加一个论点
p=argparse.ArgumentParser()
p.add_argument('--foo',nargs='?',const='abc', default='other')
p.add_argument('bar')
In [633]: p.parse_args(['bar'])
Out[633]: Namespace(bar='bar', foo='other')
In [634]: p.parse_args(['bar','--foo'])
Out[634]: Namespace(bar='bar', foo='abc')
In [635]: p.parse_args(['bar','--foo','test'])
Out[635]: Namespace(bar='bar', foo='test')
In [636]: p.parse_args(['--foo','bar'])
usage: ipython3 [-h] [--foo [FOO]] bar
'error message'
这是因为--baz
标志着--foo
参数的结束
您还可以使用--
标记选项的结束
和帖子的开始
:
p.add_argument('--baz',action='store_true')
p.parse_args(['--foo','--baz','bar'])
# Namespace(bar='bar', baz=True, foo='abc')
有一个错误问题
,它试图通过为尾部位置保留字符串来纠正此问题
argparse选项的nargs='?'、'*'或'+'后面不能跟位置
但这个补丁并非微不足道<代码>--是目前最好的工具
我不理解您对Martijn关于互斥组的评论。问题是,我想添加到互斥组。一组中有多个选项吗?@tez:没有;但您可以在解析后自由添加其他测试。如果设置了
foo_设置
,但选择了另一个互斥组选项,则需要手动检测该错误。
p.parse_args(['--foo','--','bar'])