Python 命令行参数解析工具 argparse(3)

我们经常会遇到很多解析器都会需要相同的参数,例如都需要输入用户名密码,这样我们可以定义一个父解析器定义common的规则,子解析器可以集成,并且扩展。如果定义了相同的参数便会产生冲突。argparse有两个内置的冲突处理器error(默认)和resolve,resolve会基于冲突选项的添加顺序来选择一个参数处理器,后添加覆盖老规则。我们应该尽量避免冲突,所以父解析器一般不定义帮助信息。下面举个简单的例子。

首先定义父解析器如下:

parser = argparse.ArgumentParser(description='parent 2', add_help=False) parser.add_argument('-p', '--password', help='What is your passwrd') parser.add_argument('-user', '--username', help='What is your username') parser.add_argument('-m', '--female', help='What is your female') args = parser.parse_args() print(args) # 结果 λ python arg_parent.py -h usage: arg_parent.py [-p PASSWORD] [-user USERNAME] [-m FEMALE] arg_parent.py: error: unrecognized arguments: -h λ python arg_parent.py -p 123 -user ling -m man Namespace(female='man', password='123', username='ling')

子解析器:集成并且重写

import arg_parent parser = argparse.ArgumentParser(description='son 1', parents=[arg_parent.parser], conflict_handler='resolve') parser.add_argument('-w', '--weather', help="What's the weather") parser.add_argument('-m', '--female', action='store_const', const='TRUE', help='What is your female') args = parser.parse_args() print(args) # 结果 λ python arg_son.py -m -w cold -p 123 Namespace(female='TRUE', password='123', username=None, weather='cold') λ python arg_son.py -m man usage: arg_son.py [-h] [-p PASSWORD] [-user USERNAME] [-w WEATHER] [-m] arg_son.py: error: unrecognized arguments: man

目前只用到了以上特性,还有一些特性就不一一介绍了,后续用到再补充。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/ec74f4086faf7a841961a593dc4aa571.html