为什么argparse无法解析这些参数?
使用
现在,这本身并不太糟糕。我可以接受将位置参数放在第一位,只是这种行为与argparse为我们创建的帮助不一致,它声明bar应该是最后一个参数:
这里有一个完整的测试程序。
--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
这里有一个完整的测试程序。
--
来结束nargs
通配符,所以在你上面的例子中,--foo 1 2 3 -- bar
应该可以工作。在我看来,它真的应该自动解决,为位置参数保留所需的参数数量。关于这个问题,有讨论在http://bugs.python.org/issue9338和http://bugs.python.org/issue9182(至少应该清楚地记录下来)。 - Daniel Andersson