Python3使用argparse添加命令行参数

发布时间 2023-07-05 19:11:54作者: 韩志超

argparse是Python标准库中用于解析命令行参数的模块。它提供了一种简单而灵活的方式来处理命令行参数,并生成帮助信息。

使用步骤如下:

  • 实例化一个 ArgumentParser 对象:parser = argparse.ArgumentParser()
  • 添加不同的带解析参数参数:parser.add_argument('a')
  • 解析脚本命令行参数:args = parser.parse_args()
  • 使用参数:print(args.a)

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='?')

使用位置参数

# cli.py
# 创建解析器
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

示例01

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

示例02-任意多个参数

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

使用关键字参数

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

使用action='count'

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

参考:https://docs.python.org/zh-cn/3.9/library/argparse.html