argparse库为python自带的库,使用时直接import argparse
就可以使用,第一步,我们要创建一个ArgumentParser
对象,(设置的参数最终都会作为ArgumentParser对象的属性,调用方法如ArgumentParser.xxxxx),同时在其description
参数中,我们可以输入想添加的提示信息。
import argparse
parser = argparse.ArgumentParser(description='add some useful information here....')
创建了ArgumentParser
对象之后,就可以使用add_argument()
方法来添加参数,其输入参数如下,其中[]
中的参数为可选参数,作用为设置参数的一些属性。add_argument()
第一个输入参数即为我们添加的参数,当前面没有-
前缀,比如'foo'
时为位置参数,当带有-
前缀时,为可选参数,如--foo
。位置参数和可选参数的概念这里就不解释了。
ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default]
[, type][, choices][, required][, help][, metavar][, dest])
import argparse
parser = argparse.ArgumentParser(description='arugment test')
parser.add_argument('foo') #位置参数
parser.add_argument('--foo2') #可选参数
下面先总结一下,add_argument()
方法中常用的一些属性:
属性值 | 作用 |
---|---|
type | 指定参数存储时的类型,可为int、float、str 等 |
action | 指定参数的动作,可为store_const、store_true/store_false、append、count ’ |
default | 指定参数的默认值 |
dest | 指定参数的保存位置,如设置'ddd' ,则通过parser.ddd 获取该参数值 |
choice | 指定参数的可选项,参数只能从设置值中选择 |
required | 说明参数是否为必须的,可以设置为True\False |
help | 参数的说明,用户输入--help\-h 时,会显示设置的帮助信息 |
ArgumentParser
添加的参数默认存储类型为str
,如果想以其他方式进行存储,就要通过设置type
属性来按指定类型存储,代码和运行结果如下:
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
description='Create an image list or \
make a record database by reading from an image list'
)
parser.add_argument('--foo')
parser.add_argument('--foo2', type=int)
parser.add_argument('--foo3', type=float)
args = parser.parse_args()
print('foo is', type(args.foo))
print('foo2 is', type(args.foo2))
print('foo3 is', type(args.foo3))
C:\Users\lenovo\Desktop\arg_test>py -3 arg_test.py --foo 1.1 --foo2 1 --foo3 0.1
foo is <class 'str'>
foo2 is <class 'int'>
foo3 is <class 'float'>
action
可以设置参数的动作,也就是当我们输入了该可选参数时,该参数会进行的动作。
很简单,设置该参数的值为常量,搭配const
属性使用,初始化时赋值为const
中设置的值,之后程序中不允许更改参数值,这样我们可以限制一些用户的误操作,代码和运行结果如下:
parser.add_argument('--foo',action='store_const',const='this is a constant')
args = parser.parse_args()
print('foo is', args.foo)
C:\Users\lenovo\Desktop\arg_test>py -3 arg_test.py --foo
foo is this is a constant
store_true
表示,当该参数出现时,设置该参数的值为true
,否则为false
。store_false
则相反。
parser.add_argument('--foo',action='store_true')
args = parser.parse_args()
print('foo is', args.foo)
C:\Users\lenovo\Desktop\arg_test>py -3 arg_test.py --foo
foo is True
C:\Users\lenovo\Desktop\arg_test>py -3 arg_test.py
foo is False
使用append
后,命令行中可以为该参数赋多个值,这些值将会保存在一个列表中。
parser.add_argument('--foo',action='append')
args = parser.parse_args()
print('foo is', args.foo)
C:\Users\lenovo\Desktop\arg_test>py -3 arg_test.py --foo 1,23,5
foo is ['1,23,5']
顾名思义,统计该参数出现的次数。
parser.add_argument('--foo',action='count')
args = parser.parse_args()
print('foo is', args.foo)
C:\Users\lenovo\Desktop\arg_test>py -3 arg_test.py --foo --foo --foo
foo is 3
很实用的一个属性,设置参数的默认值,也就是说,当没有输入该参数时,参数默认存储default
中设置的值。
parser.add_argument('--foo',type=str,default='default value')
args = parser.parse_args()
print('foo is', args.foo)
C:\Users\lenovo\Desktop\arg_test>py -3 arg_test.py
foo is default value
C:\Users\lenovo\Desktop\arg_test>py -3 arg_test.py --foo not-default
foo is not-default
指定参数的存储位置,该参数值将被存储为dest声明的变量中。
parser.add_argument('--foo',type=str,dest='foo_dest')
args = parser.parse_args()
print('foo is', args.foo_dest) #注意这里的调用变量为 foo_dest
C:\Users\lenovo\Desktop\arg_test>py -3 arg_test.py --foo dest_test
foo is dest_test
用户输入的参数只能是choices里面规定的,可以限制用户的输入。使程序更加鲁棒
parser.add_argument('--foo', type=int,choices=[5,6,7,8])
args = parser.parse_args()
print('foo is', args.foo)
C:\Users\lenovo\Desktop\arg_test>py -3 arg_test.py --foo 5
foo is 5
C:\Users\lenovo\Desktop\arg_test>py -3 arg_test.py --foo 1
usage: arg_test.py [-h] [--foo {5,6,7,8}]
arg_test.py: error: argument --foo: invalid choice: 1 (choose from 5, 6, 7, 8)
设置该参数是否为必须,如果为True
则要求用户一定要输入该参数。
parser.add_argument('--foo', type=int,required=True)
args = parser.parse_args()
print('foo is', args.foo)
C:\Users\lenovo\Desktop\arg_test>py -3 arg_test.py
usage: arg_test.py [-h] --foo FOO
arg_test.py: error: the following arguments are required: --foo
设置参数帮助信息,可以在其中写入一些提示,告诉用户应该如何输入该参数,相当于一个帮助文档
parser.add_argument('--foo', type=int,
help = 'add some helpful message here.')
args = parser.parse_args()
print('foo is', args.foo)
C:\Users\lenovo\Desktop\arg_test>py -3 arg_test.py -h
usage: arg_test.py [-h] [--foo FOO]
Create an image list or make a record database by reading from an image list
optional arguments:
-h, --help show this help message and exit
--foo FOO add some helpful message here. (default: None)
添加完参数后,最后调用parse_args()
方法,将会返回一个命名空间(namespace),之后我们就可以愉快的调用各个设置好的参数啦~
def parse_arg():
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
description='Create an image list or \
make a record database by reading from an image list'
)
parser.add_argument('--foo', type=int,
help='add some helpful message here.')
# parser.add_argument('--foo2', type=int)
# parser.add_argument('--foo3', type=float)
#namespace
args = parser.parse_args()
return args
总的来说,argparse库的用法还是比较傻瓜的,如果学会了,恭喜你,你再也不用在代码里面去修改参数啦~