整体说明
- 在 Python 里,
argparse.ArgumentParser()是标准库argparse模块的核心部分,其主要功能是解析命令行参数 - 大部分优秀的开源函数都会使用这个功能
代码示例
- ArgumentParser类使用示例
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66import argparse
def main():
# 创建 ArgumentParser 对象
parser = argparse.ArgumentParser(
description='这是一个命令行工具演示程序',
epilog='示例: python demo.py -n Alice -a 35 --verbose'
)
# 添加参数
# 位置参数 (未添加-为前缀的是位置参数,位置参数是必须给出的)
parser.add_argument('input_file', help='输入文件路径')
# 可选参数(添加-或--的是可选参数),同一行可以同时注册-或--,都可以作为输入参数
# # 但代码内部名字命名规则是--优先-,没有--时,代码内部-才会生效(比如下面的定义下,parser.output 和 parser.x 生效,但是 parser.o 会报错)
parser.add_argument('-o', '--output', default='output/result.txt', help='输出文件路径') # 调用时使用args.output调用参数
parser.add_argument('-x', help='x') # 调用时使用args.x调用参数
parser.add_argument('-n', '--name', default='Guest', help='用户名称') # 调用时使用args.x调用参数
parser.add_argument('--age', type=int, choices=range(30, 40), help='用户年龄(30-39)')
# action='store_true'表示这是布尔变量,若传入命令行存在该参数,则该 Python 参数值为 true,否则为 false;'store_false' 则功能相反
parser.add_argument('--verbose', action='store_true', help='显示详细输出')
parser.add_argument('--color', choices=['red', 'green', 'blue'], default='blue', help='颜色选择')
parser.add_argument('--scale', type=float, default=*0, help='缩放比例')
# 互斥参数组,同时指定会出错
group = parser.add_mutually_exclusive_group()
group.add_argument('--fast', action='store_true', help='快速模式')
group.add_argument('--slow', action='store_true', help='慢速模式')
# * 解析参数
args = parser.parse_args()
print("args对象完整属性:", args.__dict__)
print("--end--\n")
# * 使用参数
print(f"输入文件: {args.input_file}")
if args.output:
print(f"输出文件: {args.output}")
print(f"用户名: {args.name}")
if args.age:
print(f"年龄: {args.age}")
print(f"详细模式: {'是' if args.verbose else '否'}")
print(f"颜色: {args.color}")
print(f"缩放比例: {args.scale}")
if args.fast:
print("模式: 快速")
elif args.slow:
print("模式: 慢速")
else:
print("模式: 默认")
if __name__ == '__main__':
main()
# args对象完整属性: {'input_file': 'text.txt', 'output': 'output/result.txt', 'x': None, 'name': 'Guest', 'age': 33, 'verbose': False, 'color': 'blue', 'scale': *0, 'fast': False, 'slow': False}
# --end--
#
# 输入文件: text.txt
# 输出文件: output/result.txt
# 用户名: Guest
# 年龄: 33
# 详细模式: 否
# 颜色: blue
# 缩放比例: *0
# 模式: 默认
Python 内部变量参数命名规则
-和--同时存在时,优先--定义的变量- 注:传入时都可以使用,且没有优先级,只会用后面的覆盖前面的
--output-path等会自动被转换成parser.output_path变量访问- 注:传入时还是必须跟参数定义方式对齐
--output-path - 当然:
--output_path也是相同的参数名parser.output_path,若同时定义了--output_path和--output-path,则两者实际上是同一个参数,且互相之间可以被覆盖
- 注:传入时还是必须跟参数定义方式对齐
ArgumentParser 类其他使用注意事项
- 参数类型 :
- 默认情况下参数是字符串类型,可以使用
type指定其他类型 - 常用类型:
int,float,str(默认)
- 默认情况下参数是字符串类型,可以使用
- 参数种类 :
- 位置参数:没有前缀,必须提供
- 可选参数:以
-或--开头,可选提供 - 注:位置参数是必须的,可选参数可通过增加
required=True来设定为必须参数
- 常用参数选项 :
help:参数的帮助信息default:参数的默认值choices:限制参数的取值范围action:参数的动作,常见值:store:存储参数值(默认)store_true/store_false:存储布尔值append:允许多次使用参数并存储为列表
- 互斥参数 :
- 使用
add_mutually_exclusive_group()创建互斥组 - 组内的参数不能同时使用
- 使用
- 帮助信息 :
description:程序的简要描述epilog:帮助信息末尾的文本- 自动生成的帮助信息可以通过
-h或--help查看
- 错误处理 :
- 当用户输入无效参数时,
argparse会自动生成错误信息并退出,会抛出ArgumentError或SystemExit异常
- 当用户输入无效参数时,
- 子命令 :
- 对于复杂的命令行工具,可以使用
add_subparsers()实现子命令功能 - 类似
git的commit,push等子命令
- 对于复杂的命令行工具,可以使用
- 参数前缀 :
- 通常单字母参数用
-前缀,完整单词用--前缀 - 但这不是强制要求,只是约定俗成
- 通常单字母参数用