python中的解析参数
我有一个问题,我正试图找到解决办法。我不确定我是否能用argparse完成它 我希望能够指定一个选项python中的解析参数,python,parsing,command-line-interface,argparse,Python,Parsing,Command Line Interface,Argparse,我有一个问题,我正试图找到解决办法。我不确定我是否能用argparse完成它 我希望能够指定一个选项 myprog -a 1 myprog -a 2 现在,当我有a=1时,我希望能够指定b和c。但是当a=2时,我只能指定d 另外,必须始终指定a最简单的解决方案是将'-a'arequired=True参数设为,并将其他参数设为默认值notrequired。然后在解析之后,对aargs.a和其他值执行测试(我假设您可以编写这种Python逻辑) 您可以提出自己的错误,也可以使用parser.err
myprog -a 1
myprog -a 2
现在,当我有a=1时,我希望能够指定b和c。但是当a=2时,我只能指定d
另外,必须始终指定a最简单的解决方案是将
'-a'
arequired=True
参数设为,并将其他参数设为默认值notrequired。然后在解析之后,对aargs.a
和其他值执行测试(我假设您可以编写这种Python逻辑)
您可以提出自己的错误,也可以使用parser.error(“我不喜欢您的输入”)
调用
您需要编写一个自定义的用法
行。考虑到这些要求,什么是有意义的用法
有一个互斥的参数组
方法,但它不使用特定的值,只使用参数的存在与否
您还可以将测试合并到自定义操作类中。但通常这比解析后执行测试更复杂(因为argparse处理以任何顺序出现的参数)
将-a
参数转换为子参数的另一种可能性。这允许您为一个“解析器”值定义一组参数,为另一个值定义另一组参数。我认为argparse文档在这方面已经足够清楚了。您不能将切换值作为单个parse_args
调用来执行,但您可以执行以下操作之一:
使用
在完全配置解析器并在完整的命令行上运行之前,先执行部分解析,首先只检查a
,然后根据第一次调用的结果选择要解析的其他解析器参数。诀窍是用于第一个调用,因此它处理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()
这种方法的缺点是,由于不正确使用而吐出的使用信息将是不完整的;您必须手动将指定“真实”用法的文本包含在基本解析器中,这一点都不有趣。子Parser不能基于值开关进行切换,但它们具有统一、一致的使用显示
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()