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官方文档。