argparse基本功能极简介绍

argparse基本功能极简介绍

python脚本文件可以通过命令行的方式调用,在这种调用方法中,可以通过sys.argv来把命令行参数传入脚本文件,通过这种方式传入的参数是string,并且需要将该参数进行一定的转换,赋值才可以使用。那有没有一种方法可以直接将传入的参数放入脚本的命名空间,并且传入后就是python的原生类型(比如函数,list等),而不是string?

python 内置模块argparse就是这个问题的答案,另外,它还可以自动的产生help和usage信息,以及发布error信息。运用该模块的流程是:(1)创建一个parser (2)为该parser增添参数 (3)用parser_args方法将参数分发。

  • 一个小例子

创建一个名叫prog.py的脚本文件,内容如下:

import argparse
parser=argparse.ArgumentParser(description='Process some integers') #创建parser 对象
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)) #输出来自参数accumulate

命令行输入:

$ 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)
 
 
$ python prog.py 1 2 3 4

4

$ python prog.py 1 2 3 4 --sum

10

解读这个例子:

首先创建ArgumentParser实例,可选参数description可以在命令行输入 python prog.py -h,显示出描述信息'Process some integers'。

然后通过函数add_argument分别添加位置参数'integer',可选参数'sum'('--'或'-'表明为可选参数);

可选参数metavar将得到的帮助信息里integers参数显示为'N',但不改变传入脚本文件的参数名,即参数名仍未integer

可选参数type,可取这样一个对象,它可被调用,返回进行转换过的值。本例中为int,故传入的'integers'参数将被转换为整数;

可选参数nargs,该参数将多个命令行参数与单一的动作(action)连结起来,本例为'+',表明所有命令行参数被装入一个list,必须保证至少该参数有一个被传入,否则报错;

可选参数dest,决定了传入的参数名。本例中,--sum传入脚本的参数为'accumulate';

可选参数action,将动作和命令行参数联系起来,本例中,'store_const',把const标明的参数(本例为sum函数句柄)储存起来,赋值给参数,所以在这里当命令行中出现--sum,就将变量accumulate=sum传入脚本文件;

可选参数const,与其他动作配合使用,本例中与action='store_const'配合;

可选参数default,规定了argparser中的可选参数(如本例中--sum),如果不出现,其默认值,本例中为max,即--sum如果不出现在命令行中,则为max.

最后,在脚本中,parse_args可以没有参数的被调用,ArgumentParser将会自动的判定来的命令行的参数;

传入的参数名是创建parser的属性名,相应的参数值就是parser的属性名的属性值;如本例传入的accumulate是个函数句柄,则parser.accumulate就得到了该句柄(如果是--sum缺省就是max,如果有--sum就是sum),parser.integers就是integers传入的值。

更多参数及用法详见python官方文档。

##### 愿你一寸一寸地攻城略地,一点一点地焕然一新 #####
原文地址:https://www.cnblogs.com/johnyang/p/13044599.html