python模块-argparse

argparse模块用于python程序的参数解析,以下是其基本的介绍。

上面图片中讲述了模块的三个基本内容。

首先模块安装位置在/usr/lib64/python2.7/argparse.py,如果想学习一下脚本的具体内容,可以去相应路径下查看。

其次是软件的三个功能:一是解析参数、二是格式化输出、三是通过构建的解析器自动解析参数

第三部分就是模块的应用示例,是本次重点介绍的部分。

构建解析对象

parser =argparse.ArgumentParser(description='sum the integers at the command line')

#构建了一个解析对象,描述信息为sum the integers at the command line获取参数的和

#构建对象时还有很多参数,可以参考帮助信息(help(argparse))

当一个解析器构建完成后,下一步要做的就是要添加各种参数,用来承载或获取通过命令行传进的参数。

添加参数

parser.add_argument('integers',metavar='int', nargs='+', type=int,help='an integer to be summed'

parser.add_argument('--log', default=sys.stdout, type=argparse.FileType('w'),help='the file wherethe sum should be written')

在添加参数时,需要根据不同的参数选用不同的设置方法,具体的方法包括可选标识符, 参数应用名称dest,参数的个数nargs,参数默认值default,参数的类型type,指定参数范围choices、帮助信息help以及输出时的参数名称metavar),下面对其一一进行阐述。

参数设定

脚本内容

输出形式

从上面一张图片可知主要有两种形式的参数,第一个是定位参数,不存在参数前导符,使用时直接输入参数值就好;第二种就是可选参数,存在可选标识符-h/--help,在输入参数时需要先输入标识符,然后才能赋值

参数引用

脚本内容

在参数定义时,每一个参数都会有一个dest名称,默认值为定义时--后面的字符,若没有定义可选,则为参数本身

该参数是后续调用时所用的名称,如脚本中的args.sum,调用时用的是-s这个参数默认的名称,也就是sum;若觉得默认参数不太合理,可以通过dest=str进行设定。

此时调用时就应该用args.num1,而不是args.i1,否则会出现Namespace不正确的错误。

choices指定输入范围

在默认情况下,参数可以随意使用,没有范围限制。但是在某些条件下需要规范用户的输入或缩小数据处理范围,就需要指定输入数据的范围,此时可以通过choices进行设定。

脚本内容

帮助信息

此时输出帮助信息中大括号中指定了输入范围,若输入的参数未在该范围,会出现错误信息。

此处有一点需要注意,官方说明信息中支出,choices指定的是一个数据集合,而不是一个范围,也就是说如果写[1,3],输入时只能输入1或者3,而不是1到3之间的任意数值

metavar指定输出信息名称

该参数指定的是帮助信息中参数标识符后面的内容,正常情况下,标识符后面会跟一个参数,该参数是标识符指定的参数本身,默认大写输出

设定参数

输出内容

从上面的图片中我们发现,默认输出的美观度不够,示例信息也不足,此时我们就可以通过metavar进行设置。

设定参数

输出内容

此处删掉了标识符后面的内容,也可以根据个人习惯或需求指定不同的名称。

nargs指定参数传参个数

默认情况下,每一个参数后面紧跟的一个参数就是其对应的数值或字符串。但是某些情况下,一个参数需要指定多个数值,此时可以通过nargs进行设定

脚本内容

帮助信息

此处在-i/--int参数后面,显示的时两个大括号指定的输入范围,对应其后面对应的两个参数

结果输出

从结果里可以看出,-i/--int对应的两个参数分别是2和3,输出的格式为列表,可以通过列表的切片操作拆分参数,其中args.int[0]=2,args.int[1]=3

action设定无参参数

默认情况下,参数在设定时需要指定参数对应的数值/字符串,而某些情况下,只需要显示或输入一个判断命令,不需要赋值,比如-h/--help未指定数值,而是直接输出帮助信息,此时可以用action来设定参数

脚本内容

运行结果

添加-q参数不影响结果的输出,也不会报错。这种参数实际上是bool参数,有true和false两种状态,至于该如何使用这种参数,需要根据具体情况进行拿捏

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180813G1P3KH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券