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

发布于 2024-11-04 16:33:55 字数 657 浏览 0 评论 0原文

为什么 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情话难免假 2024-11-11 16:33:55

nargs='+' 告诉 argparse 将所有剩余的参数收集在一起,因此包含 bar 。它没有神奇的方法来猜测您打算将 bar 本身作为一个有意义的参数,而不是 --foo 的参数的一部分。

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

nargs='+' tells argparse to gather all remaining args together, so bar is included. It has no magical way to guess you intend bar 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 with nargs='+'. Be sure to understand the difference.

眼泪都笑了 2024-11-11 16:33:55

也许尝试执行 --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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文