Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.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_Python 2.7_Argparse - Fatal编程技术网

Python argparse-两个长度可变的参数

Python argparse-两个长度可变的参数,python,python-2.7,argparse,Python,Python 2.7,Argparse,我有一个Python程序(目前是Python 2.7,尚未决定升级到Python 3),它通过argparse接收参数,其中一个位置参数的长度是可变的(nargs=“+”)。我需要添加另一个选项,它也具有可变长度 我看到argparse在某种程度上支持两个可变长度参数,但在我的例子中,其中一个是位置参数,这意味着如果最终用户碰巧将新的可变长度选项作为位置参数之前的最后一个选项传递,则会产生歧义。更改要命名的位置参数将破坏现有的API,因此很遗憾,这是不可能的 我还考虑了多次指定同一选项的可能性(

我有一个Python程序(目前是Python 2.7,尚未决定升级到Python 3),它通过argparse接收参数,其中一个位置参数的长度是可变的(nargs=“+”)。我需要添加另一个选项,它也具有可变长度

我看到argparse在某种程度上支持两个可变长度参数,但在我的例子中,其中一个是位置参数,这意味着如果最终用户碰巧将新的可变长度选项作为位置参数之前的最后一个选项传递,则会产生歧义。更改要命名的位置参数将破坏现有的API,因此很遗憾,这是不可能的

我还考虑了多次指定同一选项的可能性(例如,-c val1,-c val2,-c val3等),这与这个问题基本相同: ,但这个问题没有直接的答案(只有变通方法,它假设只有一个可变长度的参数,所以对我来说并不真正有用)


任何关于这里最佳方法的想法都将不胜感激。

您可以指定一个需要标志的可选字段:

import argparse
parser=argparse.ArgumentParser()
parser.add_参数(“A”,nargs=“+”)
parser.add_参数(“--b”,nargs=“+”)
args=parser.parse_args(
[“a”,“b”,“c”,“d”,“--b”,“1”,“2”,“3”]
)
打印(args)
#名称空间(A=['A','b','c','d'],b=['1','2','3'])
这就需要在位置参数之后指定另一个可变长度选项



请注意,看到python 2.7不再被维护(从2020年1月1日起),您可以转到python 3,现在进行突破性的更改。

好的,我认为action='append'可能会满足我的要求。

如果您添加一些示例,您的问题可能更容易理解。正如您所说,
argparse
无法区分一个参数的结束位置和下一个参数的开始位置。理想情况下,如果第二个值为“+”,则应为此保留一个值。对于2个位置,它可能只是这样做(我必须进行测试)。但一般来说,为后一个参数保留字符串需要某种前瞻性,而
argparse
不需要这种前瞻性。您可以添加required=True,使命名参数成为非可选参数。