Python Argparse位置参数和可选参数的顺序不正确
为什么argparse不能解析这些参数Python Argparse位置参数和可选参数的顺序不正确,python,command-line,command-line-arguments,argparse,Python,Command Line,Command Line Arguments,Argparse,为什么argparse不能解析这些参数 --foo 1 2 3 bar 使用 这会产生以下错误: 错误:参数太少 但是,如果我先通过bar参数,它会起作用: bar --foo 1 2 3 现在,这本身并不太糟糕。我可以先使用位置参数,只是这种行为与argparse为我们创建的帮助不一致,argparse指出bar应该是最后一个: 用法:argparsetest.py[-h][--foo-foo [FOO…]]酒吧 那么,如何使用一致的帮助文本来实现这一点呢 这是一个完整的示例。nar
--foo 1 2 3 bar
使用
这会产生以下错误:
错误:参数太少
但是,如果我先通过bar参数,它会起作用:
bar --foo 1 2 3
现在,这本身并不太糟糕。我可以先使用位置参数,只是这种行为与argparse为我们创建的帮助不一致,argparse指出bar应该是最后一个:
用法:argparsetest.py[-h][--foo-foo
[FOO…]]酒吧
那么,如何使用一致的帮助文本来实现这一点呢
这是一个完整的示例。
nargs='+'
告诉argparse将所有剩余的arg集合在一起,因此包含了bar
。它没有神奇的方法来猜测您想要的bar
本身是一个有意义的参数,而不是--foo
的参数的一部分
文档中的示例引用了一个简单的--foo
参数,而不是带有nargs='+'
的参数。请务必理解其中的区别。是否可以尝试执行--input--output标志,并在add_参数中将这些选项设置为required=True
很容易实现它,因此最后n个参数被视为n个必需的位置参数。这不是魔术,我想这只是一个设计决定。谢谢,这很有效,给了我一致的帮助文本。唯一的缺点是额外的输入标志部分,但我可以接受。干杯为了澄清问题,建议的解决方案是使用parser.add_参数('--bar',required=True)。然后可以传递以下参数:--foo 1 2 3--bar barRan到刚才的同一个问题中。可以使用
--
结束nargs
globbing,因此--foo 1 2 3--bar
应该在上面的示例中起作用。在我看来,它确实应该自动解决,保留位置参数所需的参数数量。在和上有关于这个公开问题的讨论(至少应该清楚地记录在案)。--
停止列表太酷了。这是我最喜欢的答案。
bar --foo 1 2 3