小编典典

具有nargs行为的Python argparse错误

python

这是我的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执行上面记录的两种行为之一吗?


阅读 211

收藏
2021-01-20

共1个答案

小编典典

注意:python 3.8添加了一个action="extend",它将创建所需的[‘x’,’y’]列表

要产生[‘x’,’y’]的列表,请使用action='append'。其实它给

Namespace(p=[['x'], ['y']])

对于每一个,-p它都会给出一个['x']由指示的列表nargs='+',但append意味着将该值添加到命名空间已经拥有的值中。默认操作仅设置值,例如NS['p']=['x']。我建议您查看action文档中的段落。

optionals允许按设计重复使用。它启用诸如append和的动作count。通常,用户不希望重复使用它们,或者对最后一个值感到满意。
positionals(不带-flag)不能重复(除非允许nargs)。

2021-01-20