这是我的 argparse 示例,即sample.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-p", nargs="+", help="Stuff")
args = parser.parse_args()
print args
Python-2.7.3
我希望用户在 -p 选项后提供一个由空格分隔的参数列表。例如,如果您运行
$ sample.py -p x y
Namespace(p=['x', 'y'])
但我的问题是当你跑步时
$ sample.py -p x -p y
Namespace(p=['y'])
这既不在这里也不在那里。我想要以下其中一项
- 向用户抛出一个异常,要求他不要使用 -p 两次,而只是将它们作为一个参数提供
- 假设它是相同的选项并生成 ['x','y'] 列表。
我可以看到 python 2.7 没有做这两个事情,这让我很困惑。我可以让 python 执行上面记录的两种行为之一吗?
注意:python 3.8 添加了一个action="extend"
这将创建所需的 ['x','y'] 列表
要生成 ['x','y'] 列表,请使用action='append'
。实际上它给出了
Namespace(p=[['x'], ['y']])
对于每个-p
它给出了一个列表['x']
按照规定nargs='+'
, but append
意思是,将该值添加到命名空间已有的值中。默认操作只是设置值,例如NS['p']=['x']
。我建议查看action
文档中的段落。
optionals
通过设计允许重复使用。它可以实现类似的操作append
and count
。通常用户不会期望重复使用它们,或者对最后的值感到满意。positionals
(没有-flag
)不能重复(除非允许nargs
).
如何添加可选或一次参数?对于如何创建“不重复”论点有一些建议。一是创建自定义action
class.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)