Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 变长argparse参数列表_Python_Argparse - Fatal编程技术网

Python 变长argparse参数列表

Python 变长argparse参数列表,python,argparse,Python,Argparse,我希望将一组参数传递到一个脚本中,其中包含等量的输入和输出参数。我知道我可以按照 输入,输出=sys.argv[:中途],sys.argv[中途:] 考虑到sys.argv[0]是名称,但我需要argparse的有用功能 我还知道我可以将代码更改为解析器。添加_参数('-I',inputs',nargs='+'),这样我就可以将我的参数指定为python testarg.py-I 1 2-o 3 4,但我不想使用该语法,因为已经有一个输入的先例,一个输出python testarg.py in

我希望将一组参数传递到一个脚本中,其中包含等量的
输入
输出
参数。我知道我可以按照

输入,输出=sys.argv[:中途],sys.argv[中途:]
考虑到
sys.argv[0]
是名称,但我需要
argparse
的有用功能

我还知道我可以将代码更改为
解析器。添加_参数('-I',inputs',nargs='+')
,这样我就可以将我的参数指定为
python testarg.py-I 1 2-o 3 4
,但我不想使用该语法,因为已经有一个输入的先例,一个输出
python testarg.py input output
,我想通过语法
python testarg.py input[…]output[…]来保留它。

这是我最近的一次

import argparse
parser=argparse.ArgumentParser()
parser.add_参数('inputs',nargs='+'))
parser.add_参数('outputs',nargs='+'))
打印(parser.parse_args())
$python testarg.py 1
用法:testarg.py[-h]输入[输入…]输出[输出…]
testarg.py:错误:需要以下参数:输出
$python testarg.py 1 2
命名空间(输入=['1'],输出=['2'])
$python testarg.py 1 2 3 4
名称空间(输入=['1','2','3'],输出=['4'])
我想要

Namespace(inputs=['1', '2'], outputs=['3', '4'])

nargs
regex
通配符量词为模型(甚至使用)

在这种情况下:

Namespace(inputs=['1', '2', '3'], outputs=['4'])
一个值分配给
输出
(因为它是“一个或多个”),其余的“多个”分配给
输入

现在如果你能接受

python prog.py --inputs 1 2 --outputs 3 4
“+”将按预期工作

但是对于可变长度的位置(或者可选,后跟位置),无法告诉它第一个列表的结束位置和第二个列表的开始位置


当然,如果您喜欢
argparse
帮助,您可以在解析后调整列表平衡-例如,将“3”移动到另一个列表。调整解析的值没有错。在解析器中做任何事情都不会得到额外的“好孩子”分数。

NARG是以
正则表达式
通配符量词为模型的(甚至使用)

在这种情况下:

Namespace(inputs=['1', '2', '3'], outputs=['4'])
一个值分配给
输出
(因为它是“一个或多个”),其余的“多个”分配给
输入

现在如果你能接受

python prog.py --inputs 1 2 --outputs 3 4
“+”将按预期工作

但是对于可变长度的位置(或者可选,后跟位置),无法告诉它第一个列表的结束位置和第二个列表的开始位置

当然,如果您喜欢
argparse
帮助,您可以在解析后调整列表平衡-例如,将“3”移动到另一个列表。调整解析的值没有错。在解析器本身中做任何事情都不会得到额外的“好孩子”分数。

该库可以做到这一点,它支持可以修改参数值的回调函数

导入单击
def split_参数(上下文、参数、值):
num_args=len(值)
如果num_参数为%2:
提升click.bad参数(
f“必须提供偶数个参数,获得{num_args}个参数”
)
中点=num_args//2
返回值[:中点],值[中点:]
@click.command()命令
@参数(“args”,callback=split\u args,nargs=-1)
def io(args):
输入、输出=args
打印(“输入:”,输入)
打印(“输出:”,输出)
如果名称=“\uuuuu main\uuuuuuuu”:
io()
库可以做到这一点,它支持可以修改参数值的回调函数

导入单击
def split_参数(上下文、参数、值):
num_args=len(值)
如果num_参数为%2:
提升click.bad参数(
f“必须提供偶数个参数,获得{num_args}个参数”
)
中点=num_args//2
返回值[:中点],值[中点:]
@click.command()命令
@参数(“args”,callback=split\u args,nargs=-1)
def io(args):
输入、输出=args
打印(“输入:”,输入)
打印(“输出:”,输出)
如果名称=“\uuuuu main\uuuuuuuu”:
io()

我认为它没有这方面的功能,使用
-I
-o
输入和输出如何工作更简单?我认为将它们配对可能更有意义,比如
testarg.py输入输出[--io输入输出]…
。这将允许您使用
nargs=2
为您验证数字。
input-output[input-output]…
是另一种解析工作量显著减少的方法(只需让argparse读取一个列表,然后检查它是否有偶数个项目,否则将其报告为使用错误——这是一个方便的方法)。谢谢,成对的
input-output[input-output]…
可能是一种更简单的方法,我没有考虑过!我认为它没有这个功能,使用
-I
-o
输入和输出是如何工作的?我认为将它们配对可能更有意义,比如
testarg.py input output[-io input output]…
。这将允许您使用
nargs=2
为您验证数字。
input-output[input-output]…
是另一种解析工作量显著减少的方法(只需让argparse读取一个列表,然后检查它是否有偶数个项目,并将其报告为使用错误,否则这是一个方便的方法)。谢谢,成对的
input-output[input-output]…
可能是一种更简单的方法,我没有想过!