我有一个Python程序 (目前是Python 2.7,还没决定是否要升级到Python 3),它通过argparse接收参数,其中一个位置参数的长度是可变的 (nargs="+")。我需要添加另一个选项,它的长度也是可变的。
我看到 argparse 对两个可变长度的参数有某种支持,但由于其中一个是位置参数,这意味着如果最终用户恰好将新的可变长度选项作为位置参数之前的最后一个选项传递,就会产生歧义。将位置参数改为命名会破坏现有的API,所以很遗憾这是不可能的。
我还想到了多次指定同一个选项的可能性(如-c val1、-c val2、-c val3等),这和这个问题差不多。在Python的argparse中多次使用同一个选项。但这个问题并没有直接的答案(只有一些变通的方法,这些方法假设没有超过一个可变长度的参数,所以对我来说并没有什么用)。
如果有什么好办法,我将非常感激。
你可以指定一个需要标志的可选字段。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("A", nargs="+")
parser.add_argument("--b", nargs="+")
args = parser.parse_args(
["a", "b", "c", "d", "--b", "1", "2", "3"]
)
print(args)
# Namespace(A=['a', 'b', 'c', 'd'], b=['1', '2', '3'])
所有这一切都需要在位置参数之后指定另一个可变长度选项。
作为一个说明,看到python 2.7已经不再维护了(从01012020开始),你可以转移到python 3,现在就进行你的突破性修改。
好吧,我想action='append'可能会起到我想要的作用。