【发布时间】:2020-09-17 23:07:20
【问题描述】:
我希望将一组参数传递到具有等量 inputs 和 outputs 参数的脚本中。我知道我可以按照以下方式解析
inputs, outputs = sys.argv[:halfway], sys.argv[halfway:]
考虑到sys.argv[0] 是名称,但我想要argparse 的有用功能。
我也知道我可以将代码更改为parser.add_argument('-i', 'inputs', nargs='+'),这样我就可以将我的参数指定为python testarg.py -i 1 2 -o 3 4,但我不想使用那种语法,因为已经有一个输入,一个 -输出python testarg.py input output,我想通过制作语法python testarg.py inputs[...] outputs[...]来保留它
这是我得到的最接近的
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('inputs', nargs='+')
parser.add_argument('outputs', nargs='+')
print(parser.parse_args())
$ python testarg.py 1
usage: testarg.py [-h] input [input ...] output [output ...]
testarg.py: error: the following arguments are required: output
$ python testarg.py 1 2
Namespace(inputs=['1'], outputs=['2'])
$ python testarg.py 1 2 3 4
Namespace(inputs=['1', '2', '3'], outputs=['4'])
我想要
Namespace(inputs=['1', '2'], outputs=['3', '4'])
【问题讨论】:
-
我认为它没有这个功能,使用
-i和-o会更简单 -
输入和输出是如何工作的?我认为将它们配对可能更有意义,例如
testarg.py input output [--io input output] ...。这样您就可以使用nargs=2为您验证数字。 -
input output [input output]...是另一种可以大大减少解析工作的方法(只需让 argparse 读取 one 列表,然后检查它是否有偶数个项目并报告它否则作为使用错误 - 有一种方便的方法)。 -
谢谢,对
input output [input output]...可能是更简单的方法,我没想到!