如何使 argparse 从 nargs=REMAINDER 中拆分 nargs='+'

Jac*_*era 6 python argparse

我使用 argparse 将多个位置参数解析为input,然后将多个位置参数解析为output。由于参数的数量不受限制,我尝试将其用作--分隔符。--我通常使用分隔符成功nargs=argparse.REMAINDER,所以我尝试了以下方法:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("input", nargs='+')
parser.add_argument("output", nargs=argparse.REMAINDER)

args = parser.parse_args("input1 input2 -- output1 outpu2".split())
print(args)
Run Code Online (Sandbox Code Playgroud)

但是,所有参数都已放入input,我得到以下输出:

Namespace(input=['input1', 'input2', 'output1', 'outpu2'], output=[])
Run Code Online (Sandbox Code Playgroud)

--正确使用,但它不充当分隔符。

有没有办法使用 来实现这一点argparse

ric*_*ici 3

不,没有。--用于将命名(“可选”)参数与位置参数分开,而不是将位置参数拆分为子段。这就是为什么文档说(添加了强调;引用来自nargs=\'*\'但没有什么区别,除了\'+\'需要至少一个参数):

\n\n
\n

\'*\'所有存在的命令行参数都收集到一个列表中。请注意,\xe2\x80\x99 拥有多个位置参数通常没有多大意义nargs=\'*\',但拥有多个可选参数nargs=\'*\',但可以

\n
\n\n

为什么不定义一个标志--output(用nargs=\'+\'或什至nargs=\'*\')并使用更明确的方式调用您的程序

\n\n
input1 input2 --output output1 output2\n
Run Code Online (Sandbox Code Playgroud)\n\n

(如果您担心输入八个字符,请使用简短的标志名称。)

\n