Argparse 位置参数和可选参数顺序错误
为什么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
那么,怎么才能让这个工作并且帮助文本保持一致呢?
这里有一个完整的测试程序。
2 个回答
4
nargs='+'
是告诉 argparse 把所有剩下的参数都收集在一起,所以 bar
也会被包含进去。它并没有什么神奇的办法来猜测你想让 bar
成为一个独立的有意义的参数,而不是 --foo
的一部分。
文档中的例子提到的是一个简单的 --foo
参数,而不是带有 nargs='+'
的那种。一定要理解这两者之间的区别。
3
你可以试着使用 --input 和 --output 这两个选项,并把这些选项的设置改为必填的,也就是在 add_argument 里加上 required=True。
http://docs.python.org/dev/library/argparse.html#the-add-argument-method