参考资料
argparseg官方文档:python3
argparseg官方文档:python3-中文
子命令 subparsers()
功能比较多的命令端程序常常将功能分解到不同子命令中,如在Python中常见的pip install、pip uninstall等。当程序比较复杂且不同功能都需要不同参数时,子命令是一个不错的方式。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
41import argparse
def add(args):
r = args.x + args
print('x + y = ', r)
def sub(args):
r = args.x - args
print('x - y = ', r)
parser = argparse.ArgumentParser(prog='PROG')
subparsers = parser.add_subparsers(help='sub-command help')
#添加子命令 add
parser_a = subparsers.add_parser('add', help='add help')
parser_a.add_argument('-x', type=int, help='x value')
parser_a.add_argument('-y', type=int, help='y value')
# 提供参数枚举值list
parser.add_argument('-tag' , dest='tag' , default=False, action='store', type=str, choices=["couple","trio","single"],help='familyTag Type')
# 提供参数确定bool值
args_inheritCoincide.add_argument('-trio' , dest='trio' , default=False, action='store_true', help='if trio,default for single')
运行时,提供参数则为True,不提供参数则默认为False。
#设置默认函数
parser_a.set_defaults(func=add)
#添加子命令 sub
parser_s = subparsers.add_parser('sub', help='sub help')
parser_s.add_argument('-x', type=int, help='x value')
parser_s.add_argument('-y', type=int, help='y value')
#设置默认函数
parser_s.set_defaults(func=sub)
args = parser.parse_args()
#执行函数功能
args.func(args)
运行命令1
2
3
4$python subc.py add -x 1 -y 2
x + y = 3
$python subc.py sub -x 1 -y 2
x - y = -1
参数分组
有时候,我们需要给参数分组,以使得在显示帮助信息时能够显示到一起。但是和子命令不同的是,不同的组会在同时被使用。
比如某命令行支持三个参数选项 –user、–password和–push,前两者需要放在一个名为 authentication 的分组中以表示它们是身份认证信息。那么我们可以用 ArgumentParser.add_argument_group 来满足:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15group = parser.add_argument_group('authentication')
group.add_argument('--user', action="store")
group.add_argument('--password', action="store")
parser.add_argument('--push', action='store')
parser.parse_args(['-h'])
# usage: [-h] [--user USER] [--password PASSWORD] [--push PUSH]
# optional arguments:
# -h, --help show this help message and exit
# --push PUSH
# authentication:
# --user USER
# --password PASSWORD
add_argument() 方法
ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
定义单个的命令行参数应当如何解析。每个形参都在下面有它自己更多的描述,长话短说有:
1 | name or flags - 一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo。 |
ArgumentParser 对象
1 | prog - The name of the program (default: os.path.basename(sys.argv[0])) |