一、简述
用Python官网文档的话概括地说,argparse
模块能够使得terminal命令行函数接口变得简洁友好。而这一模块的主要功能就聚焦在:
- 声明脚本程序需要什么样的变量;
- 这些变量将如何从
sys.arg
中解析得到。
能够熟练使用argparse
模块,将极大的推动terminal的操作和使用。
二、举例说明
下面我们通过官网的例子来一步一步拆解这些API接口含义:
Example
# 我们假设这块代码的脚本名是 pro.py
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))
在terminal中运行上面的脚本 prog.py,查看帮助信息
$ python prog.py -h
usage: prog.py [-h] [--sum] N [N ...]
Process some integers.
positional arguments:
N an integer for the accumulator
optional arguments:
-h, --help show this help message and exit
--sum sum the integers (default: find the max)
在terminal中输入合适的数值,查看结果
$ python prog.py 1 2 3 4
4
$ python prog.py 1 2 3 4 --sum # 可以看出,不显示的地输入--sum,是默认的max操作,反之是sum操作
10
接下来就对脚本prog.py进行拆解,每一个序号顺次对应脚本的一行
- 导入模块argparse,不用多说
- 通过
argparse.ArgumentParser()
实例化一个叫做parser
类;向里面传参description
,其值为一段字符串,而description的作用就是概述当前文档的作用或功能,当用-h/--help
进行查看时,description
里面的内容就会显示出来。 - 非常核心,我们的主要目标就是理解这一步传递的很多参数到底是什么意思。
parser.add_argument()
就是要声明一些脚本主体会用得到的参数。而我们的目的是声明一些变量,主要有位置变量
positional argument和可选变量
optional argument,其中位置变量前面没有诸如-
或者--
的前缀,而可选变量必须要添加前缀-
或者--
;同时位置变量
在命令行无须写出起变量名,而可选变量
必须要完整地写出其变量名。
再来看里面传递的各种参数到底是什么意思?里面传递的第一个参数必须是位置参数
或可选参数
,其余的参数都是关键字参数,即以key=vlaue的形式给parser.add_argument()
传参。
显然这一行声明了一个变量intergers
(1)参数metavar
表示当通过-h
或--help
查看帮助信息时,传递给当前定义变量的值到底要要用什么名字表示。如果不指定,默认就是我们定义的变量名,可选变量要去掉前缀并转变成大写
(2)参数type
表示这个参数被解析后要转变成什么类型的格式,是str、int还是bool等;
(3)nargs
表示要给变量传递多少个值;
(4)help
里面写一些关于该变量的提示信息
概括的说,这一行的代表表达了:声明一个位置变量
integers,在帮助文档里将以metavar指定的名字显示,并且要求该变量解析后必须是整数,可以向该变量传递任意多个数,还添加了一串关于该位置比变量的帮助信息 - 通过以上介绍,该行代码就很简单了,定义了一个
可选变量
- -sum;
参数dest
表示当解析后,该变量要转化成属性名为accumulate 形式,且该属性传递给了args
,即可以通过args.accumulate
来获得对应的解析值。其实所有的解析值都是通过这种方式索引的,所以下面3
中的解析变量可以通过args.integers
来获取;
参数action
表示怎么对待该值,这里是存储常量store_const
,所以还需定义参数const
,而这里的const=sum表示对输入到可选变量
- - sum的数据求和,sum是一个系统函数。 - 当我们定义完这些
位置/可选变量
以及如何解析
后,就要请出解析方法parse_args()
。解析值复制给args
- 求和或求最大值然后打印。
三、查看帮助须注意
注意:接下来是的东西很重要
- 当我们看帮助信息时:如果变量是以中括号[ ]的形式出现,表示该变量是可选变量,不是必须要有的;
- 如果是该变量后面跟着大括号{ },表示大括号里面的数要必选其一(如果定义时,
choices
关键字参数被指定,就是此种情况); - 当两个变量用竖直线 a|b 表示,表示变量a和b是互斥关系,势不两立,违规将报错;
- 当变量没有任何括号,表示该变量是必选变量(required = True)会出现此种情况。
大概思想理解了,写不动了,还是看官网教程吧
argparse官网教程
如果英文水平不太高,也可以参看简书的一篇文章