argparse 是python自带的命令行参数解析包,可以用来方便地读取命令行参数,当你的代码需要频繁地修改参数的时候,使用这个工具可以将参数和代码分离开来,让你的代码更简洁,适用范围更广。

基本用法

下面是使用argparse从命令行获取用户名,并打印’Hello’ + ‘用户名’。

1
2
3
4
5
6
7
8
9
10
11
12
#python3
#script name: test.py

import argparse

parser = argparse.ArgumentParser(description='Demo of argparse.')
parser.add_argument('--Name', '-n', default='Billy', help='This argument is name. default is "Billy"')

args = parser.parse_args()
name = args.Name

print('Hello {}'.format(name))

命令执行结果:

1
2
3
4
5
6
7
8
$ python3 test.py
Hello Billy

$ python3 test.py -n Tom
Hello Tom

$ python3 test.py -Name Tom
Hello Tom
  1. 上面的代码段中,我们显示引入了argparser包,然后通过argparser.ArgumentParser函数生成parser对象,其中这个函数的description函数表示在命令行显示帮助信息的时候,这个程序的描述信息。可以通过python3 test.py -h显示帮助信息。
  2. 之后我们通过对象的add_argument函数来增加参数。其中,--Name表示完整的参数名,在后续编程中使用的必须是这个完整参数名。-n表示简化的参数名,是为了方便程序的使用者。default是可选参数,表示参数的默认值。help是参数的说明信息,在帮助信息中会显示。
  3. 参数设置完成后,通过对象的parse_args函数传递给变量args,便于后续编程。
  4. 调用参数:通过完整参数名来调用参数内容,如args.Name

parser.add_argument() 常用参数

  1. 完整形参和简化形参

    完整形参是必需的,两条横线声明,如上面案例中的 --Name
    简化形参用一条横线声明,如上面案例中的 -n

2. default 参数默认的值
3. required 表示这个参数是否一定需要设置

如果设置了required=True,则在实际运行的时候必需设置此参数,否正程序报错

4. type 参数类型

默认参数类型是字符串(str)。如果程序需要一个整数或布尔值类型的话,则需要设置type=inttype=bool

5. choices 参数值可选择的选项,如一下代码

1
2
#参数的值只能是alexnet或vgg
parser.add_argument('-arch', required=True, choices=['alexnet', 'vgg'])

6. dest 设置参数在代码中的变量名

argparse默认的变量名是–或-后面的字符串,但是你也可以通过dest=xxx来设置参数的变量名,然后在代码中用args.xxx来获取参数的值。
7. narg 指定该参数后面的参数值个数

使用方式如下:

``python
parser.add_argument(‘-name’, nargs=x)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

其中, `x`的候选值和含义如下:
> N 参数的绝对个数(例如:3)
> '?' 0或1个参数
> '*' 0或所有参数
> '+' 所有,并且至少一个参数

如下例子:
```python
# file-name: nargs.py
import argparse

def get_parser():
parser = argparse.ArgumentParser(
description='nargs demo')
parser.add_argument('-name', required=True, nargs='+')

return parser


if __name__ == '__main__':
parser = get_parser()
args = parser.parse_args()
names = ', '.join(args.name)
print('Hello to {}'.format(names))

执行结果:

1
2
$ python3 nargs.py -name A B C
Hello to A, B, C