多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## 模块说明 ### 1、定义: argparse是python标准库里面用来处理命令行参数的库,用于代替已经过时的optparse模块 ### 2、位置参数和选项参数: **位置参数**就是程序根据该参数出现的位置来确定的,如:`[root@openstack_1 /]# ls root` 其中`root`是位置参数 **选项参数**是应用程序已经提前定义好的参数,不是随意指定的,如:`[root@openstack_1 /]# ls -l ` ,其中`-l `就是ls命令里的一个选项参数 ### 3、使用步骤: (1)import argparse    首先导入模块 (2)parser = argparse.ArgumentParser()    创建一个解析对象 (3)parser.add_argument()    向该对象中添加你要关注的命令行参数和选项 (4)parser.parse_args()    进行解析 ### 4、argparse.ArgumentParser()方法参数: 一般我们只选择用description这一个选项 * prog=None 程序名 * **description=None** help时显示的开始文字 * epilog=None help时显示的结尾文字 * parents=[] 若与其他参数的一些内容一样,可以继承 * formatter\_class=argparse.HelpFormatter 自定义帮助信息的格式 * prefix\_chars='-' 命令的前缀,默认是‘-’ * fromfile\_prefix\_chars=None 命令行参数从文件中读取 * argument\_default=None 设置一个全局的选项缺省值,一般每个选项单独设置 * conflict\_handler='error' 定义两个add\_argument中添加的选项名字发生冲突时怎么处理,默认处理是抛出异常 * add\_help=True 是否增加-h/--help选项,默认是True) ### 5、add_argument()方法参数用法: ArgumentParser.add\_argument(nameor flags...\[, action\]\[, nargs\]\[, const\]\[, default\]\[, type\]\[, choices\]\[, required\]\[, help\]\[, metavar\]\[, dest\]) * **name or flags** :参数有两种,可选参数和位置参数 * **action:** 解析到一个命令行参数时该如何处理.action有一组固定值可选.但一般默认就行 | action的值 | 功能 | | --- | --- | | store | 默认,将参数值保存在options对象里. | | store_const| 存储值const指定的常量中 | | store_false| 布尔选项,赋值False. | | store_true| 布尔选项,赋值True | | count| 统计参数出现的次数| | append| 将此选项的参数存为列表 | | append_const| 存为列表,会根据const关键参数添加 | * **nargs:** 参数的数量 * **const** :保存一个常量 * **default** :默认值 * **type** :参数类型,默认为str * **choices** :设置参数值的范围,如果choices中的类型不是字符串,记得指定type * **required** :该选项是否必选,默认为True * **metaver**:帮助信息中显示的参数名称 * **dest** :参数名 ### 6、简单使用 ~~~ import argparse parse=argparse.ArgumentParser(description='我是帮助信息') parse.add_argument('-f') parse.add_argument('-q') args=parse.parse_args() #执行-h显示帮助 >test.py -h usage: test.py [-h] [-f F] [-q Q] 我是帮助信息 optional arguments: -h, --help show this help message and exit -f F -q Q ~~~ ## 重要参数举例 ### name or flags... 必选参数,有可选参数和位置参数两种。可选参数和位置参数不能同时存在 `-f`和`--file` 这种是可选参数中的短参数和长参数,可以有多个 `filename` 这种是位置参数,只能有一个,且必传 若没有指定dest,优先使用长参数做属性名 1. 可选参数案例: ~~~ import argparse parse=argparse.ArgumentParser() parse.add_argument('-f','--file') args=parse.parse_args() print('args:',args) print('args.file:',args.file) #执行结果 >test.py #不传参数也不报错 args: Namespace(file=None) args.file: None >test.py -f a.txt #用最后一个参数file做属性名 args: Namespace(file='a.txt') args.file: a.txt ~~~ 2. 位置参数案例 ~~~py import argparse parse=argparse.ArgumentParser() parse.add_argument('file') args=parse.parse_args() print('args:',args) print('args.file:',args.file) #执行结果 >test.py #不带位置参数就报错 usage: test.py [-h] file test.py: error: the following arguments are required: file >test.py a.txt #位置参数直接写,不需要写参数名 args: Namespace(file='a.txt') args.file: a.txt ~~~ ### dest属性参数 设置这个选项的value解析出来后放到哪个属性中 ~~~ import argparse parse=argparse.ArgumentParser() parse.add_argument("-f",'--file',dest='filename') args=parse.parse_args() print('args:',args) #执行结果: >test.py -f a.txt #和上例子对比,可以发现不同 args: Namespace(filename='a.txt') ~~~ ### action动作参数 action 表示值赋予键的方式,默认为store,存储到对象中 * store_const,值存放在const中: ~~~py >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='store_const', const=42) >>> parser.parse_args('--foo'.split()) Namespace(foo=42) ~~~ * store_true和store_false,值存为True或False ``` >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='store_true') >>> parser.add_argument('--bar', action='store_false') >>> parser.add_argument('--baz', action='store_false') >>> parser.parse_args('--foo --bar'.split()) Namespace(bar=False, baz=True, foo=True) ``` * append:存为列表 ``` >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='append') >>> parser.parse_args('--foo 1 --foo 2'.split()) Namespace(foo=['1', '2']) ``` * append_const:存为列表,会根据const关键参数进行添加: ``` >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--str', dest='types', action='append_const', const=str) >>> parser.add_argument('--int', dest='types', action='append_const', const=int) >>> parser.parse_args('--str --int'.split()) Namespace(types=[<type 'str'>, <type 'int'>]) ``` * count:统计参数出现的次数 ``` >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--verbose', '-v', action='count') >>> parser.parse_args('-vvv'.split()) Namespace(verbose=3) ``` * version:版本 ``` >>> import argparse >>> parser = argparse.ArgumentParser(prog='PROG') >>> parser.add_argument('--version', action='version', version='%(prog)s 2.0') >>> parser.parse_args(['--version']) PROG 2.0 ``` ### required和type参数 通常-f这样的选项是可选的,但是如果required=True那么就是必须的了,不输入就会报错提醒 ~~~ import argparse parse=argparse.ArgumentParser() parse.add_argument("-f", required=True,type=int) args=parse.parse_args() print('args:',args) 执行结果: >test.py #不带参数报错 usage: test.py [-h] -f F test.py: error: the following arguments are required: -f >test.py -f a.txt #参数类型错误报错 usage: test.py [-h] -f F test.py: error: argument -f: invalid int value: 'a.txt' >test.py -f 123 #正常的参数类型不报错 args: Namespace(f=123) ~~~ ### choices范围参数 可设置参数的范围,如果choice中的类型不是字符串,要指定type 表示该参数能接受的值只能来自某几个值候选值中,除此之外会报错,用choice参数即可 ~~~ import argparse parse=argparse.ArgumentParser() parse.add_argument("-f",choices=['aa','bb']) args=parse.parse_args() print('args:',args) #z执行结果: >test.py -f qq usage: test.py [-h] [-f {aa,bb}] test.py: error: argument -f: invalid choice: 'qq' (choose from 'aa', 'bb') >test.py -f aa args: Namespace(f='aa') ~~~ ### nargs参数 指定这个参数后面的value有多少个,默认为1 ~~~ import argparse parse=argparse.ArgumentParser() parse.add_argument("-f",nargs=2) args=parse.parse_args() print('args:',args) #执行结果: >test.py -f a.txt b.txt args: Namespace(f=['a.txt', 'b.txt']) ~~~ nargs还可以正则表达式 '*'表示如果有该位置参数输入的话,之后所有的输入都将作为该位置参数的值; ‘+’表示读取至少1个该位置参数。'?'表示该位置参数要么没有,要么就只要一个。(PS:跟正则表达式的符号用途一致。)