Argparse位置和可选参数的顺序不正确

时间:2011-05-02 08:19:21

标签: python command-line command-line-arguments argparse

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

--foo 1 2 3 bar

使用

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

会出现以下错误:

  

错误:参数太少

如果我首先通过了条形参数,它可以工作:

bar --foo 1 2 3   

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

  

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

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

这是一个完整的test program

2 个答案:

答案 0 :(得分:4)

nargs='+'告诉argparse将所有剩余的args收集在一起,因此包含bar。没有神奇的方法可以猜测你希望bar本身是一个有意义的论证,而不是--foo所采用的算法的一部分。

文档中的示例引用了一个简单的--foo参数,而不是一个nargs='+'参数。一定要了解其中的区别。

答案 1 :(得分:3)

也许尝试在add_argument中执行--input --output flags并将这些选项设置为required = True?

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