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

标签 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')

出现以下错误:

error: too few arguments

如果我先传递 bar 参数,它会起作用:

bar --foo 1 2 3   

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

usage: argparsetest.py [-h] [--foo FOO [FOO ...]] bar

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

这是一个完整的 test program .

最佳答案

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

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

关于python - Argparse 位置参数和可选参数的顺序不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5854920/

相关文章:

Python:使用 sh 运行 docker 容器并处理 UTF-8 解码错误

Python - str() 函数完全改变列表

linux - 在 bash 中排序

python - Argparse:可选参数,不同位置参数不同

powershell - 如何在 Powershell 中执行相当于 $PROGPATH/program 的 bash?

python - 为什么 inspect() 认为 map 不是内置的?

python - Keras 中卷积自动编码器的输出大小

Java JAR 无法识别命令行参数

Java - 来自 Windows 命令行但不是 Eclipse 的 classNotFound 异常

batch-file - 读取批处理文件中参数的每个字符