python的ArgumentParser使用及说明
作者:黄色摩托
这篇文章主要介绍了python的ArgumentParser使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
python的ArgumentParser使用
ArgumentParser是python用来标准化处理sys.argv
#!/usr/bin/env python # coding: utf8 from argparse import ArgumentParser OPT_BOOK = { 'dest': 'book', 'nargs': '+', 'help': 'Which book do you want study', 'required': True } OPT_PAGE = { 'dest': 'page', 'nargs': '+', 'help': 'Pages of book to study', 'required': True } OPT_ITEM = { 'dest': 'item', 'nargs': '+', 'help': 'Pages of book to study', 'required': True } OPT_WORD = { 'dest': 'word', 'nargs': '+', 'help': 'Pages of book to study', 'required': True } def _create_parser(parser_factory): """ 创建二级命令 """ parser = parser_factory('project', help='Study project') parser.add_argument('-b', '--book', **OPT_BOOK) parser.add_argument('-p', '--page', **OPT_PAGE) parser.add_argument('-i', '--item', **OPT_ITEM) parser.add_argument('-w', '--word', **OPT_WORD) return parser def create_argument_parser(): """ 创建一级命令 """ parser = ArgumentParser(prog='study') subparsers = parser.add_subparsers() subparsers.dest = 'project' subparsers.required = True _create_parser(subparsers.add_parser) return parser
简单的使用按照以上方式来做,用程序名构造ArgumentParser(这里是study),随意给一个父命令add_subparsers(这里是project),然后建立解析工厂parser_factory(这里是project和父命令同名),最后给一堆的参数输入型命令add_argument(这里是book,page,item,word,可以用不定参字典,给予帮助信息或必传等选项)
这里是test方法:
#!/usr/bin/env python # coding: utf8 import sys from utils.logger import get_logger from utils.commander import create_argument_parser if __name__ == '__main__': parser = create_argument_parser() arguments = parser.parse_args(sys.argv[1:]) get_logger().info(arguments.project) get_logger().info(arguments.book) get_logger().info(arguments.page) get_logger().info(arguments.item) get_logger().info(arguments.word)
这里是输出:
[INFO]:2021-02-02 17:16:01,074:{TFSpleeter:project}
[INFO]:2021-02-02 17:16:01,074:{TFSpleeter:['book-a']}
[INFO]:2021-02-02 17:16:01,074:{TFSpleeter:['32']}
[INFO]:2021-02-02 17:16:01,074:{TFSpleeter:['what', 'is', 'item']}
[INFO]:2021-02-02 17:16:01,074:{TFSpleeter:['fuck']}
python对象属性ArgumentParser,Namespace
1. ArgumengParser
1.1. 作用
分配属性,可以从python执行命令参数中获取
1.2. 导包
# python from argparse import ArgumentParser
1.3. 参数
ArgumentParser(prog=None)
- prog:显示的程序名,不填则默认是文件名
1.4. 属性
- 1.4.1. add_argument(*args, **kwargs)
声明创建属性的规则
参数
- 第一个参数: 必填,键名,格式:"-a"或"–a"
- dest: 非必填,参数名重置为
- default: 非必填,默认值
- type: 非必填,参数类型
- choices: 非必填,可选值,格式:列表,元组
- required: 非必填,是否必填,默认False
- namespace: 非必填,分配属性的对象
- help: 非必填,说明文字
举个栗子
# python b = B() parser = ArgumentParser() parser.add_argument('--foo', dest='jjj', type=str, required=True) parser.add_argument('-env', choices=['test', 'prod'])
- 1.4.2. parse_args(args=None, namespace=None)
将参数转为对象,并将属性分配给命名空间
参数
- args:非必填,赋值列表,必须一一对应
- namespace: 非必填,分配属性的对象
举个栗子
1.代码行分配
# python a = parser.parse_args(['--foo', 'werw', '-env', '234']) print(a.env) # 输出 234 b = B() parser.parse_args(['--foo', 'werw', '-env', '234'], namespace=b) print(b.env) # 输出 234
2.启动命令分配
# linux python3 test.py --foo='www' -evn='234'
2. Namespace 命名空间
2.1. 作用
创建一个包含属性的对象,返回该对象
2.2. 导包
# python from argparse import Namespace
2.3. 用法
# python a = Namespace(env='test', level=2) print(a.evn) # 输出 test print(a.level) # 输出 2
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。