解析器argparse模块

一、简述

用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进行拆解,每一个序号顺次对应脚本的一行

  1. 导入模块argparse,不用多说
  2. 通过argparse.ArgumentParser()实例化一个叫做parser类;向里面传参description,其值为一段字符串,而description的作用就是概述当前文档的作用或功能,当用-h/--help进行查看时,description里面的内容就会显示出来。
  3. 非常核心,我们的主要目标就是理解这一步传递的很多参数到底是什么意思。
    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指定的名字显示,并且要求该变量解析后必须是整数,可以向该变量传递任意多个数,还添加了一串关于该位置比变量的帮助信息
  4. 通过以上介绍,该行代码就很简单了,定义了一个可选变量- -sum;
    参数dest表示当解析后,该变量要转化成属性名为accumulate 形式,且该属性传递给了args,即可以通过args.accumulate来获得对应的解析值。其实所有的解析值都是通过这种方式索引的,所以下面3中的解析变量可以通过args.integers来获取;
    参数action表示怎么对待该值,这里是存储常量store_const,所以还需定义参数const,而这里的const=sum表示对输入到可选变量- - sum的数据求和,sum是一个系统函数。
  5. 当我们定义完这些位置/可选变量以及如何解析后,就要请出解析方法parse_args()。解析值复制给args
  6. 求和或求最大值然后打印。

三、查看帮助须注意

注意:接下来是的东西很重要

  • 当我们看帮助信息时:如果变量是以中括号[ ]的形式出现,表示该变量是可选变量,不是必须要有的;
  • 如果是该变量后面跟着大括号{ },表示大括号里面的数要必选其一(如果定义时,choices关键字参数被指定,就是此种情况);
  • 当两个变量用竖直线 a|b 表示,表示变量a和b是互斥关系,势不两立,违规将报错;
  • 当变量没有任何括号,表示该变量是必选变量(required = True)会出现此种情况。

大概思想理解了,写不动了,还是看官网教程
argparse官网教程
如果英文水平不太高,也可以参看简书的一篇文章

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值