如何使用Python对参数进行解析
通常情况下,在读取命令行的参数时,我用的就是sys
库, 读取输入的参数进行处理
import sys
arg1 = sys.argv
由于很多脚本就我自己一个人用,所以这样写没啥问题。但是如果要给别人用,或者时间过得久远些,那么就得要把参数使用说明写的具体些,方便将来使用。
Python提供了argparse
库,让我们更加容易的进行命令行参数解析。简略流程为,先用ArgumentParser
创建参数解析对象ArgumentParser
,再用add_argument()
在解析对象里添加要解析的参数. 最后用parse_args()
进行解析,返回参数所在的命名空间。如果涉及到子命令,则还需要add_subparsers
。
基础
让我们先用一个简单的例子了解下argparse
的功能
#!/usr/bin/env python
# prog.py
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
以不同方式运行代码
$ python multi_pilon.py
$ python multi_pilon.py --help
usage: multi_pilon.py [-h]
optional arguments:
-h, --help show this help message and exit
$ python multi_pilon.py --verbose
usage: multi_pilon.py [-h]
multi_pilon.py: error: unrecognized arguments: --verbose
当我们不传递任何参数时,脚本不会输出任何信息;当我们用--help
时,得到了脚本的一些使用说明;当我们传入其他没有声明的参数时,脚本输出了报错信息。
位置参数
位置参数就是在命令后面跟着的不以-
或--
开头的参数, 举个例子
#!/usr/bin/env python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)
代码运行
$ python prog.py
usage: prog.py [-h] echo
prog.py: error: too few arguments
$ python prog.py foo
foo
我们用add_argument()
方法增加了待解析的位置参数。这时如果不提供足够多的参数,运行程序时就会出现报错信息。当提供对应参数时,代码就能正常运行。
add_arguments()
可以传入多个参数,比较常用的是help
和type
, 一个能用于完善帮助信息,一个则是让python自动完成数据类型的转换
#!/usr/bin/env python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number",type =int)
args = parser.parse_args()
print(args.square ** 2)
代码执行的结果如下
$ python prog.py -h
usage: prog.py [-h] square
positional arguments:
square display a square of a given number
optional arguments:
-h, --help show this help message and exit
$ python prog.py 2
4