使用Argparse添加命令行参数
argparse是Python标准库中用于解析命令行参数的模块。它提供了一种简单而灵活的方式来处理命令行参数,并生成帮助信息。
使用步骤如下:
- 实例化一个
ArgumentParser
对象:parser = argparse.ArgumentParser()
- 添加不同的带解析参数参数:
parser.add_argument('a')
- 解析脚本命令行参数:
args = parser.parse_args()
- 使用参数:
print(args.a)
import argparse
parser = argparse.ArgumentParser(description='Calc')
# 添加位置参数
parser.add_argument('method', choices=['add', 'sub'], help='calc method')
parser.add_argument('-a', type=int, help='variable a')
parser.add_argument('-b', type=int, help='variable b')
# 解析参数
args = parser.parse_args()
# 使用参数
if args.method == 'add':
print(f'{args.a} + {args.b} =', args.a+args.b)
elif args.method == 'sub':
print(f'{args.a} + {args.b} =', args.a + args.b)
add_argument() 支持的参数
- dest: 存储的变量名(第一个参数)
- action: 参数存储模式
- store: 存储传入的变量值(默认)
- store_const: 存为固定值
- store_true:存为True
- append: 每出现一次,将参数值添加到列表中
- append_const:每出现一次,将固定值添加到列表中
- count:存储参数出现次数
- version: 添加版本信息
- type: 参数转换类型,未指定时参数值为字符串格式(仅
action='store'
时可用)- int: 转为整数存储
- float:转为浮点数存储
- argparse.FileType():转为文件对象存储
- 任意函数,
- choices: 参数选择,仅允许使用其中的参数
- required: 必选参数(仅关键字参数)
- metavar: 变量说明,(不支持action为store_true, count, version时)
- nargs: 重复次数,支持
N
(重复N次),'?'
(0或1次),'*'
(重复任意次) - default: 默认值,配合
nargs='?'
使用,该参数不指定时,使用默认值 - help: 参数说明
位置参数一遍仅使用action='store'类型,存储传入的值。
位置参数不支持required
(默认已是必填,除非使用nargs='?'
)
使用位置参数(arguments)
# cli.py
import argparse
# 创建解析器
parser = argparse.ArgumentParser(description='Calc Add')
# 添加位置参数
parser.add_argument('a', type=int, help='variable a to add')
parser.add_argument('b', type=int, help='variable b to add')
# 解析参数
args = parser.parse_args()
# 使用参数
print(f'{args.a} + {args.b} =', args.a+args.b)
在命令行使用Python运行脚本,使用-h
参数查看帮助信息,输出如下:
$ python3 cli.py -h
usage: cli.py [-h] a b
Calc Add
positional arguments:
a variable a to add
b variable b to add
optional arguments:
-h, --help show this help message and exit
按位置传入a,b参数,输出如下:
python3 cli.py 3 5
3 + 5 = 8
示例-限定choices和可选位置参数
import argparse
# 创建解析器
parser = argparse.ArgumentParser(description='Calc Add')
# 添加位置参数
parser.add_argument(dest='a', type=int, metavar='变量a', choices=[1, 2, 3, 4, 5], help='variable a to add')
parser.add_argument(dest='b', type=int, metavar='变量b', nargs='?', default=1, help='variable b to add')
# 解析参数
args = parser.parse_args()
print(f'{args.a} + {args.b} =', args.a+args.b)
$ python3 cli.py -h
usage: cli.py [-h] 变量a [变量b]
Calc Add
positional arguments:
变量a variable a to add
变量b variable b to add
optional arguments:
-h, --help show this help message and exit
$ python3 cli.py 6
usage: cli.py [-h] 变量a [变量b]
cli.py: error: argument 变量a: invalid choice: 6 (choose from 1, 2, 3, 4, 5)
$ python3 cli.py 5
5 + 1 = 6
示例-任意多个参数
import argparse
# 创建解析器
parser = argparse.ArgumentParser(description='Calc Add')
# 添加位置参数
parser.add_argument(dest='a', type=int, metavar='变量a', nargs='*', help='variable a to add')
# 解析参数
args = parser.parse_args()
print('sum(a) =', sum(args.a))
$ python3 cli.py 1 2 3 4 5
sum(a) = 15
使用选项参数 (options)
import argparse
# 创建解析器
parser = argparse.ArgumentParser(description='Calc Add')
# 添加位置参数
parser.add_argument('-a', '--var_a', dest='a', type=int, metavar='变量a', required=True, help='variable a to add')
parser.add_argument('-b', '--var_b', dest='b', type=int, metavar='变量b', default=1, help='variable b to add')
# 解析参数
args = parser.parse_args()
print(f'{args.a} + {args.b} =', args.a+args.b)
未指定dest存储的变量名时,近执行短参数
-a
时,变量名为args.a
, 指定长参数--var_a
时,变量名为args.var_a
, 指定dest时,变量名为dest指定的变量。
$ python3 cli.py -h
usage: cli.py [-h] -a 变量a [-b 变量b]
Calc Add
optional arguments:
-h, --help show this help message and exit
-a 变量a, --var_a 变量a variable a to add
-b 变量b, --var_b 变量b variable b to add
$ python3 cli.py -a3 -b2
3 + 2 = 5
python3 cli.py --var_a 3
3 + 1 = 4
短参使用时可以用
-a=3
或-a3
,长参使用使用可以使用--var_a=3
或--var_a 3
示例-添加版本信息
import argparse
# 创建解析器
parser = argparse.ArgumentParser(description='Calc Add')
parser.add_argument(--version', action='version', version='%(prog)s v0.1.0')
$ python3 cli.py --version
cli.py v0.1.0
示例-使用参数计数动作
import argparse
# 创建解析器
parser = argparse.ArgumentParser(description='Calc Add')
# 添加位置参数
parser.add_argument('-a', '--var_a', type=int, metavar='变量a', required=True, help='variable a to add')
parser.add_argument('-b', '--var_b', type=int, metavar='变量b', default=1, help='variable b to add')
parser.add_argument('-v', action='count', help='verbosity level')
# 解析参数
args = parser.parse_args()
if args.v > 2:
print(f'args.a={args.var_a}')
print(f'args.b={args.var_b}')
print(f'{args.var_a} + {args.var_b} =', args.var_a + args.var_b)
elif args.v > 1:
print(f'{args.var_a} + {args.var_b} =', args.var_a + args.var_b)
else:
print(args.var_a + args.var_b)
$ python3 cli.py -a=1 -b=2 -vvv
args.a=1
args.b=2
1 + 2 = 3
嵌套子命令
import argparse
# 创建解析器
parser = argparse.ArgumentParser(description='Calc')
subparsers = parser.add_subparsers(dest='command', help='sub command')
parser_add = subparsers.add_parser('add', help='Calc Add')
parser_add.add_argument('a', type=int, help='variable a')
parser_add.add_argument('b', type=int, help='variable b')
parser_add = subparsers.add_parser('sub', help='Calc Sub')
parser_add.add_argument('-a', type=int, help='variable a')
parser_add.add_argument('-b', type=int, help='variable b')
args = parser.parse_args()
if args.command == 'add':
print(f'{args.a} + {args.b} =', args.a + args.b)
elif args.command == 'sub':
print(f'{args.a} - {args.b} =', args.a - args.b)
使用方法如下:
$ python3 cli.py -h
usage: cli.py [-h] {add,sub} ...
Calc
positional arguments:
{add,sub} sub command
add Calc Add
sub Calc Sub
optional arguments:
-h, --help show this help message and exit
python3 cli.py add 1 3
1 + 3 = 4
$ python3 cli.py sub -a5 -b3
5 - 3 = 2
使用默认操作函数
import argparse
# 创建解析器
parser = argparse.ArgumentParser(description='Calc')
subparsers = parser.add_subparsers(dest='command', help='sub command')
def add(args):
print(f'{args.a} + {args.b} =', args.a + args.b)
def sub(args):
print(f'{args.a} - {args.b} =', args.a - args.b)
parser_add = subparsers.add_parser('add', help='Calc Add')
parser_add.add_argument('a', type=int, help='variable a')
parser_add.add_argument('b', type=int, help='variable b')
parser_add.set_defaults(func=add) # 绑定默认操作函数
parser_add = subparsers.add_parser('sub', help='Calc Sub')
parser_add.add_argument('-a', type=int, help='variable a')
parser_add.add_argument('-b', type=int, help='variable b')
parser_add.set_defaults(func=sub) # 绑定默认操作函数
args = parser.parse_args()
args.func(args) # 调用默认操作函数处理
使用方法如下:
$ python3 cli.py sub -a5 -b3
5 - 3 = 2