我使用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)
但是,所有参数都放在input
中,我得到以下输出:
Namespace(input=['input1', 'input2', 'output1', 'outpu2'], output=[])
--
已正确使用,但它不充当分隔符
有没有办法用argparse
来实现这一点
不,没有
用于将命名(“可选”)参数与位置参数分开,而不是将位置参数拆分为子段。这就是为什么文档会说(加上强调;引用自
nargs='*'
,但除了'+'
至少需要一个参数外没有区别):为什么不定义一个标志
output
(使用nargs='+'
甚至nargs='*'
),并使用更明确的(如果需要键入八个字符,请使用短标志名。)
您可以定义一个自定义操作,该操作负责使用(几乎)任何您喜欢的分隔符将参数集划分为输入和输出文件
然后一个电话
会产生
作为输出。(注意
本身,以及显然以
开头的任何内容,都会触发
files
参数的处理结束,因此我使用了+++
作为默认分隔符。)我还根据每个选项配置了分隔符。您可以将
files
参数的定义更改为然后用
以获得相同的输出
相关问题 更多 >
编程相关推荐