在 python 编写的程序中,我们经常会看到一片的 argparse 相关代码,而它究竟怎么使用呢?接下来,我们将以例子详细学习它。
argparse是什么?
- argparse 是一个__命令行参数解析__模块。
- 可以轻松编写用户友好的命令行接口,在程序中定义需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。
- argparse 还会自动生成帮助和使用手册,并在用户传入无效参数时报出错误信息。
import argparse
# 创建一个ArgumentParser的对象,此对象包含将命令行参数解析为 python 数据类型所需的全部信息。
parser = argparse.ArgumentParser(description='Process some integers.')
创建完解析器后,如何向其中加入参数信息呢?
调用add_argument()
函数完成,这些调用指定 ArgumentParser 如何获取命令行字符串并将其转换为对象。
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))
将以上代码全部写入文件test.py中,测试执行:
python test.py 8 2 4 1
pyhton test.py 8 2 4 1 --sum
第一个执行输出结果为:8,默认取最大值。第二次执行结果为:15,指定求和。
看完上面例子,下面详细介绍各个参数的意义:
先来看看其参数有哪些以及其默认值:
class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True)
-h/--help
选项其参数如下(‘[ ]’ 表示可选参数):
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
接下来,我们依次查看每个参数的作用:
1)name or flags:一个命名或者一个选项字符串的列表,例如 - ‘echo’ 为一个命名,‘-f’ 或 ‘-foo’ 为一个选项。
parser.add_argument('-f', '--foo') # 选项参数
parser.add_argument('bar') # 位置参数
2)action: 当参数在命令行中出现时使用的动作基本类型,其选项包含:
store - 存储参数的值,为默认选项
store_const - 存储被 const 命名参数指定的值, 通常用在选项中来指定一些标志
parser.add_argument('--foo', action='store_const', const=42)
store_true / store_false - store_const 分别用作存储 True 和 False 值的特殊用例,其默认值为 False / True
parser.add_argument('--foo', action='store_true')
append - 存储一个列表,并且将每个参数值追加到列表中。在允许多次使用选项时很有用
append_const - 将 const 命名参数指定的值追加到列表中
count - 计算一个关键字参数出现的数目或次数
parser.add_argument('--verbose', '-v', action='count', default=0)
parser.parse_args(['-vvv']) # Namespace(verbose=3)
help - 打印所有当前解析器中的选项和参数的完整帮助信息
version - 打印版本信息
parser.add_argument('--version', action='version', version='%(prog)s 2.0')
extend - 存储一个列表,将每个参数值扩展至该列表
parser.add_argument("--foo", action="extend", nargs="+", type=str)
parser.parse_args(["--foo", "f1", "--foo", "f2", "f3", "f4"])
# Namespace(foo=['f1', 'f2', 'f3', 'f4'])
3)nargs:读取的命令行参数个数, 支持的值有:
4)default:默认值设置
5)type:参数类型,默认为字符串类型。还包括 float、int 等类型
6)choices:参数可允许的值的一个容器,使用之外的值会报错
parser.add_argument('move', choices=['rock', 'paper', 'scissors'])
7)required:可选参数是否可以省略
parser.add_argument('--foo', required=True) # 不可省略
8)help: 参数的帮助信息
9)metavar: 在 usage 说明中的参数名称
10)dest: 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线
parse_args(args=None, nampespace=None)
args - 参数名称,namespace - 赋值
对 add_argument() 中定义的参数进行赋值。
>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('-x')
>>> parser.add_argument('--foo')
>>> parser.parse_args(['-x', 'X'])
Namespace(foo=None, x='X')
>>> parser.parse_args(['--foo', 'FOO'])
Namespace(foo='FOO', x=None)
参考文档:
https://docs.python.org/zh-cn/3/library/argparse.html