python之argparse命令行选项与参数解析
argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并自动生成帮助和使用信息。当然,Python 也有第三方的库可用于命令行解析,而且功能也更加强大,比如 docopt,Click。
Argparse使用方法
创建 ArgumentParser() 对象
1 | ArgumentParser(prog=None, usage=None, description=None, epilog=None) |
prog(不建议更改)
程序名称(默认sys.argv[0],默认为函数文件名),设置prog则改变这一默认。假设在example.py
里用了ArguemntParser
,而且没有特别指定prog
(None
),prog
会被自动指定成example.py
。usage(不建议更改)
用于描述程序的使用用法(默认为添加到解析器中的参数)。在使用
python xxx.py -h
之后将出现。保持None
会自动根据设定的参数产生相对应的说明字串。description
字串,通常是一段简短的说明,告知使用者该程序的用途。
epilog
字串,出现在参数说明字串的最后,通常是一些补充资料。
可通过以下代码查看具体情形
1 | # example.py |
调用 add_argument() 方法添加参数
1 | ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest]) |
- name or flags - 选项字符串的名字或者列表,例如 foo 或者 -f, –foo。
- action - 命令行遇到参数时的动作,默认值是 store。
- store_const,表示赋值为const;
- append,将遇到的值存储成列表,也就是如果参数重复则会保存多个值;
- append_const,将参数规范中定义的一个值保存到一个列表;
- count,存储遇到的次数;此外,也可以继承 argparse.Action 自定义参数解析;
- nargs - 应该读取的命令行参数个数,可以是具体的数字,或者是?号,当不指定值时对于 Positional argument 使用 default,对于 Optional argument 使用 const;或者是 * 号,表示 0 或多个参数;或者是 + 号表示 1 或多个参数。
- const - action 和 nargs 所需要的常量值。
- default - 不指定参数时的默认值。
- type - 命令行参数应该被转换成的类型。
- choices - 参数可允许的值的一个容器。
- required - 可选参数是否可以省略 (仅针对可选参数)。
- help - 参数的帮助信息,当指定为
argparse.SUPPRESS
时表示不显示该参数的帮助信息. - metavar - 在 usage 说明中的参数名称,对于必选参数默认就是参数名称,对于可选参数默认是全大写的参数名称.
- dest - 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线.
互斥参数
另外介绍下互斥参数的设置
1 | group = parser.add_mutually_exclusive_group() |
第一行定义了一个互斥组,第二、三行在互斥组中添加了-v
和-q
两个参数,-q
和-v
不出现,或仅出现一个都可以,同时出现就会报错。
使用 parse_args() 解析添加的参数
一旦参数选项被指定,你就可以执行 parse_args()
方法了。 它会处理 sys.argv
的值并返回一个结果实例。 每个参数值会被设置成该实例中add_argument()
方法的dest
参数指定的属性值。
实例代码
1 | import sys |
使用如下参数运行
1 | python argv_argparse.py Jame 1991.11.11 -p Harden John -a 25 -r han -s male -o 1 2 3 4 5 6 |
结果如下:
argparse.args= Namespace(age=25, birth=’1991.11.11’, name=’Jame’, other=[‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’], parent=[‘Harden’, ‘John’], race=’han’, sex=’male’)
name = Jame
name = Jame
birth = 1991.11.11
race = han
age = 25
sex = male
parent = [‘Harden’, ‘John’]
other = [‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’]