本文首发于我的个人博客Suixin’s Blog
argparse是Python内置的一个用于命令项选项与参数解析的模块,在编写脚本的过程中是非常常用的。
在其使用中主要包含三个步骤:
import argparse
parser = argparse.ArgumentParser(description='this is a process for read file')
parser.add_argument('fileinPath', help='path to input file')
parser.add_argument('fileoutPath', help='path to output file')
args = parser.parse_args()
而当如上定义后,即可在需要用到参数的地方调用args.fileinPath
和args.fileoutPath
。下面详细讲解一下add_argument()
方法。
add_argument()
方法
位置参数
位置参数是必选参数,如果命令行解析不到就会报错,上面例子中两个参数都是位置参数。
可选参数
可选参数可以填写两种,长的可选参数以及短的,并且可以并存,会首先解析长可选参数。如:
parser.add_argument('-s', '--square', help='display a square of a given number', type=int)
当然在一个脚本中,位置参数与可选参数是可以并存的。
一个例子
给一个整数序列,输出它们的和或最大值(默认)
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))
则在调用的时候:
>>> python test.py
usage: test.py [-h] [--sum] N [N ...]
test.py: error: the following arguments are required: N
>>> python test.py -h
usage: test.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 test.py 1 2 3 4
4
>>> python test.py 1 2 3 4 --sum
10
所有参数
name or flags
- 选项字符串的名字或者列表,例如foo
或者-f
,--foo
;action
- 命令行遇到参数时的动作,默认值是store
;store_const
,表示赋值为const
。意思为如果能解析到该参数,则该参数赋值为const
的值,见上个例子;store_true
和store_false
,参数默认值分别为False
和True
。意思为如果能解析到该参数,则参数值分别改为True
和False
;append
,将遇到的值存储成list
,也就是如果参数重复则会保存多个值。如:>>> import argparse >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', action='append', type=int) >>> parser.parse_args('--foo 1 --foo 2'.split()) Namespace(foo = [1, 2])
append_const
,将固定值保存成一个list
。意思为如果能解析道该参数,则list
将会append
一个const
进来。如:
在命令行:import argparse parser = argparse.ArgumentParser() parser.add_argument('--str', dest='types', action='append_const', const=str) parser.add_argument('--int', dest='types', action='append_const', const=int) args = parser.parse_args() print(args)
>>> python test.py --str --str --int Namespace(types=[<class 'str'>, <class 'str'>, <class 'int'>])
count
,存储遇到的参数次数。nrgs
- 应该读取的命令行参数个数,可以是具体的数字、*
、+
和?
。*
表示0个或多个;+
表示1个或多个;?
时,若解析不到参数,则使用default
值,对于可选参数,若只写了参数名而后面没有值,则使用const
值。如>>> parser = argparse.ArgumentParser() >>> parser.add_argument('--foo', nargs='?', const='c', default='d') >>> parser.add_argument('bar', nargs='?', default='d') >>> parser.parse_args(['XX', '--foo', 'YY']) Namespace(bar='XX', foo='YY') >>> parser.parse_args(['XX', '--foo']) Namespace(bar='XX', foo='c') >>> parser.parse_args([]) Namespace(bar='d', foo='d')
nargs=1
会将参数存放为list
,不同于不设置;对参数加nargs='*'
或nargs='+'
在一定程度可以代替action='append'
。const
-action
和nargs
所需要的常量值;default
- 不指定参数时的默认值;type
- 命令行参数应该被转换成的类型;choices
- 参数可允许的值的一个容器。可以是list
和range
;required
- 可选参数是否可以省略 (仅针对可选参数)。如果设置required='True'
,则可选参数解析不到时报错;metavar
- 在 usage 说明中的参数名称,对于位置参数默认就是参数名称,对于可选参数默认是全大写的参数名称;dest
- 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线。
参考
http://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/argparse.html
https://docs.python.org/3/library/argparse.html#the-add-argument-method