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 ...]] 栏
那么如何使这项工作具有一致的帮助文本呢?
这是一个完整的测试程序。
Why won't argparse parse these arguments?
--foo 1 2 3 bar
Using
parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs='+')
parser.add_argument('bar')
which gives the following error:
error: too few arguments
If I pass the bar argument first though, it works:
bar --foo 1 2 3
Now, this in itself is not too bad. I can live with having the positional arguments first it's just that this behaviour is inconsistent with the help argparse creates for us, which states that bar should be last:
usage: argparsetest.py [-h] [--foo FOO
[FOO ...]] bar
So how do you make this work with consistent help text?
Here's a complete test program.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
nargs='+'
告诉 argparse 将所有剩余的参数收集在一起,因此包含bar
。它没有神奇的方法来猜测您打算将bar
本身作为一个有意义的参数,而不是--foo
的参数的一部分。文档中的示例引用了一个简单的
--foo
参数,而不是带有nargs='+'
的参数。一定要理解其中的区别。nargs='+'
tells argparse to gather all remaining args together, sobar
is included. It has no magical way to guess you intendbar
to be a meaningful argument by itself and not part of the args taken to--foo
.The example in the docs refers to a simple
--foo
argument, not one withnargs='+'
. Be sure to understand the difference.也许尝试执行 --input --output 标志并将这些选项在 add_argument 中设置为 required=True ?
http://docs.python.org/dev/library /argparse.html#the-add-argument-method
Maybe try doing --input --output flags and setting those options to required=True in the add_argument?
http://docs.python.org/dev/library/argparse.html#the-add-argument-method