在 python 编写的程序中,我们经常会看到一片的 argparse 相关代码,而它究竟怎么使用呢?接下来,我们将以例子详细学习它。
argparse是什么?
- argparse 是一个__命令行参数解析__模块。
- 可以轻松编写用户友好的命令行接口,在程序中定义需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。
- argparse 还会自动生成帮助和使用手册,并在用户传入无效参数时报出错误信息。
1. 创建一个解析器
import argparse
# 创建一个ArgumentParser的对象,此对象包含将命令行参数解析为 python 数据类型所需的全部信息。
parser = argparse.ArgumentParser(description='Process some integers.')
2. 添加参数
创建完解析器后,如何向其中加入参数信息呢?
调用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)')
3. 解析参数
args = parser.parse_args()
4. 执行并输出
print(args.accumulate(args.integers))
将以上代码全部写入文件test.py中,测试执行:
python test.py 8 2 4 1
pyhton test.py 8 2 4 1 --sum
第一个执行输出结果为:8,默认取最大值。第二次执行结果为:15,指定求和。
看完上面例子,下面详细介绍各个参数的意义:
1. 解析器对象
先来看看其参数有哪些以及其默认值:
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)
- prog - 程序的名称(默认:sys.argv[0])
- usage - 描述程序用法的字符串(默认值:从添加到解析器的参数生成)
- description - 在参数帮助文档之前显示的文本,可用于描述程序用途
- epilog - 在参数帮助文档之后显示的文本
- parents - 一个 ArgumentParser 对象的列表,继承父解析器的参数( 大多数父解析器会指定 add_help=False )
- formatter_class - 可用于自定义帮助文档输出格式
- prefix_chars - 参数的前缀
- fromfile_prefix_chars - 从文件中读取参数的前缀
- argument_default - 参数全局默认值
- conflict_handler - 解决冲突的策略
- add_help - 为解析器添加一个
-h/--help
选项 - allow_abbrev - 是否允许识别缩写
2. add_argument()
其参数如下(‘[ ]’ 表示可选参数):
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:读取的命令行参数个数, 支持的值有:
- N - 具体数值
- ‘ ? ’ - 若无命令行参数,使用 default;若选项字符串出现但没有跟随命令行参数产生 const 值
- ‘ * ’ - 表示 0 或多个参数
- ‘ + ’ - 表示 1 或多个参数
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: 解析后的参数名称,默认情况下,对于可选参数选取最长的名称,中划线转换为下划线
3. parse_args()
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)