我需要一个标志
-y
,它可以从[a,b,c]
中获取一个值和/或从[e,f,g]
中获取一个值,并且不接受任何其他值。我希望 [a,b,c]
互斥,并且 [e,f,g]
互斥。我还要求(如果存在)[a,b,c]
在 [e,f,g]
之前出现。
有效示例:
无效示例:
-type=str
让我可以将值附加到 -y
的末尾。-choices=
让我可以指定有效的参数,但需要详尽无遗。我知道我可以使用 itertools
来生成此内容,但我希望帮助看起来像 -y[abc][efg] Help message.
。我正在考虑在解析参数后检查该正则表达式是否有效。
-y[abc]?[efg]?[\r\n\s]?
有没有更好的方法来处理这个问题?我不知道 argparse 是否有内置方法来给出互斥参数列表。
例如
add_argument("-y",choices=\[\[a,b,c\],\[e,f,g\]\])
一种可能的解决方案是创建所有有效的组合。比如:
import argparse
from itertools import product
g1 = ['a', 'b', 'c']
g2 = ['e', 'f', 'g']
cross = [''.join(x) for x in product(g1, g2)]
parser = argparse.ArgumentParser()
parser.add_argument('-y', choices=g1 + g2 + cross, metavar='[abc][efg]')
args = parser.parse_args()