8

为什么 argparse 不解析这些参数?

--foo 1 2 3 bar

使用

parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs='+')                  
parser.add_argument('bar')

这给出了以下错误:

错误:参数太少

如果我先通过 bar 参数,它会起作用:

bar --foo 1 2 3   

现在,这本身并不算太糟糕。我可以先使用位置参数,只是这种行为与 argparse 为我们创建的帮助不一致,后者指出 bar 应该是最后一个:

用法:argparsetest.py [-h] [--foo FOO [FOO ...]] bar

那么如何使用一致的帮助文本来完成这项工作呢?

这是一个完整的测试程序

4

2 回答 2

4

nargs='+'告诉 argparse 将所有剩余的 args 收集在一起,因此bar包含在内。它没有神奇的方式来猜测你打算bar成为一个有意义的论点,而不是被带到 args 的一部分--foo

文档中的示例指的是一个简单的--foo参数,而不是一个带有nargs='+'. 请务必了解其中的区别。

于 2011-05-02T08:22:10.740 回答
3

也许尝试做 --input --output 标志并在 add_argument 中将这些选项设置为 required=True ?

http://docs.python.org/dev/library/argparse.html#the-add-argument-method

于 2011-05-02T08:51:03.410 回答