我遇到了一个问题,正在寻找解决方案。我不确定是否可以使用 argparse 来做到这一点。
我希望能够指定一个选项
myprog -a 1
myprog -a 2
现在,当我有 a = 1 时,我希望能够指定 b 和 c。但是当a = 2时,我只能指定d。
myprog -a 1 -b 3 -c 0
myprog -a 2 -d 3
此外,必须始终指定a
最佳答案
您无法将切换值作为单个 parse_args
调用来执行此操作,但您可以执行以下操作之一:
- 使用sub-commands/sub-parsers
- 在完全配置解析器并在完整命令行上运行之前进行部分解析,首先仅检查
a
,然后根据第一次调用的结果选择其他解析器参数进行解析。诀窍是使用parse_known_args
对于第一次调用,因此它处理a
(它可以识别)并忽略其他所有内容。
例如,对于方法#2,您可以这样做:
parser = argparse.ArgumentParser()
parser.add_argument('-a', required=True, type=int, choices=(1, 2)
args = parser.parse_known_args()
if args.a == 1:
parser.add_argument('-b', ...)
parser.add_argument('-c', ...)
args = parser.parse_args()
else:
parser.add_argument('-d', ...)
args = parser.parse_args()
这种方法的缺点是,因不正确的使用而吐出的使用信息将不完整;您必须手动在基本解析器中包含指定“真实”用法的文本,这并不有趣。子解析器无法根据值切换进行切换,但它们具有统一、连贯的使用显示。
关于python - 在Python中解析参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34689279/