命令行解析——argparse模块
命令行解析——argparse模块
- 一、为什么要使用argparse模块?
- 二、使用argparse模块主要有哪些步骤?
- 1 导入模块——argparse
- 2 创建解析器——ArgumentParser
- 3 添加参数选项——add_argument
- 4 程序调用参数——parse_args
- 5 如何使用?
- (1) 脚本式
- (2) 交互式
- 三、ArgumentParser解析器详解
- 四、add_argument添加参数选项详解
- 参考
一、为什么要使用argparse模块? ??为了提升效率,加上提高代码的可复用性,大型的任务中,我们一般不会直接把参数硬编码在程序中,而是通过命令行传入相应的参数,这样的方式更加灵活,且效率更高;甚至,我们都不会从命令行去传入参数,而是通过sh文件,shell脚本编程来传入相应的参数。
??之前还有个optparse,但是Python2.7之后不再对optparse模块进行扩展。
??另外sys模块也可以进行简单的解析。如图,sys.argv[0]代表文件名,sys.argv[n]代表参数n,本质是命令行传入的参数以列表的形式保存在sys.argv这个变量中。在参数很多,有些不需要传入,有些取固定值,有些有数据类型要求,有些参数要传递多个等情况下sys.argv便无法胜任。
二、使用argparse模块主要有哪些步骤? 1 导入模块——argparse
import argparse
2 创建解析器——ArgumentParser ??argparse模块是一个类,因此首先要建立一个对象(ArgumentParser)
parser = argparse.ArgumentParser()# 实例化
3 添加参数选项——add_argument
parser.add_argument('name')# 添加位置参数,必须给定
parser.add_argument('-a','--age', type=int, dest='age')# 添加可选参数,可选给定
4 程序调用参数——parse_args
args = parser.parse_args()# 返回一个命名空间,方便使用变量
args_all = args.__dict__# 取出所有参数,字典(key,val)
args_name = args.name# 取出name参数,val
5 如何使用? (1) 脚本式
vim argparse_test.py
___________________________________________________________
import argparsedef argparse_test():
parser = argparse.ArgumentParser()parser.add_argument('name',type=str)
parser.add_argument('-a','--age', type=int, dest='age') args = parser.parse_args() print('单个调用参数')
print(args.name)
print(args.age)print('一次调用全部参数')
args_all = args.__dict__
for key,value in args_all.iteritems():
print ('%s = %s'%(key,value))if __name__ == '__main__':
argparse_test()
___________________________________________________________
python3 argparse_test.py tianyu -a 22# 常用
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
单个调用参数
tianyu
22
一次调用全部参数
name = tianyu
age = 22
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
(2) 交互式
import argparseparser = argparse.ArgumentParser()parser.add_argument('name')
parser.add_argument('-a','--age', type=int, dest='age') args = parser.parse_args('tianyu -a 22'.split())# 测试时才用
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Namespace(age=22, name='tianyu')
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
三、ArgumentParser解析器详解
argparse.ArgumentParser(
prog=None,# 程序名,默认使用文件名,可以自定义,程序中可以通过%(prog)s引用程序名
usage=None,# 用法信息,默认自动生成,也可以自定义
description=None,# help信息前显示的信息
epilog=None,# help信息之后显示的信息
parents=[],# 由ArgumentParser对象组成的列表,它们的arguments选项会被包含到新ArgumentParser对象中
formatter_class=argparse.HelpFormatter,# help信息输出的格式,为了美观,详见“参考3”
prefix_chars='-',# 参数前缀,默认为’-‘(最好不要修改)
fromfile_prefix_chars=None,# 前缀字符,放在文件名之前,文件内是参数,参数多时使用
argument_default=None,# 设置一个全局的选项的缺省值,一般每个选项单独设置,基本没用
conflict_handler='error',# 解决冲突的策略,默认情况下冲突会发生错误(最好不要修改)
add_help=True)# 是否增加-h/-help选项 (默认为True),一般help信息都是必须的
四、add_argument添加参数选项详解
ArgumentParser.add_argument(
name or flags...# 指定位置参数,如 'name' ;或指定可选参数,如 '-n','--name'
[, action]# 指定如何处理命令行给出的参数,如 'store'-仅保存参数值,默认;'store_const'-仅保存const关键字指定的值,而不能自己指定参数值;'store_true'和'store_false'-仅保存True和False,而不能自己指定参数值;'append'-将相同参数的不同值保存在一个list中;'count'-统计该参数出现的次数;'version'-输出程序版本信息,('--version', action='version', version='%(prog)s 2.0')
[, nargs]# 指定参数的数量,如整数 'n' - n个参数保存在一个list中;'*' -任意多个保存在一个list中;'+' -一个及其以上保存在一个list中;'?' -一次从命令行、const和default中取值,直至取到值;'argparse.REMAINDER' -命令行其余参数保存到一个list中
[, const]# 保存一个常量
[, default]# 设置参数缺省时的默认值,
[, type]# 指定参数类型,默认为str,也可以设置为int和float
[, choices]# 设置参数值范围,如果choices中的类型不是字符串,记得指定type,('x', type=int, choices=range(1, 4))
[, required]# 指定该选项是否必选,默认为可选(即False)
[, help]# 描述选项的作用
[, metavar]# 帮助信息中显示的参数名(用来提示)
[, dest])# 保存参数的变量名,可自定义),默认从选项中提取
参考 【命令行解析——argparse模块】1 Python解析命令行参数,你到底会不会用argparse?
2 33 Python 详解命令解析 - argparse
3 python命令行解析模块argparse
4 argparse — Parser for command-line options, arguments and sub-commands
推荐阅读
- 急于表达——往往欲速则不达
- 慢慢的美丽
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 2019-02-13——今天谈梦想()
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- Ⅴ爱阅读,亲子互动——打卡第178天
- 低头思故乡——只是因为睡不着
- 取名——兰
- 每日一话(49)——一位清华教授在朋友圈给大学生的9条建议
- 广角叙述|广角叙述 展众生群像——试析鲁迅《示众》的展示艺术