python——Argparse 教程
此模块是 Python 标准库中推荐的命令行解析模块。
位置参数
add_argument() 方法
1 2 3 4 5 import argparse parser = argparse.ArgumentParser() parser.add_argument("echo", help="echo the string you use here") args = parser.parse_args() print(args.echo)
输出:
1 2 3 4 5 6 7 8 python3 test.py -h usage: test.py [-h] echo positional arguments: echo echo the string you use here optional arguments: -h, --help show this help message and exit
1 2 3 4 5 6 7 8 import argparse parser = argparse.ArgumentParser() parser.add_argument("square", help="display a square of a given number", type=int) args = parser.parse_args() print(args.square ** 2)
输出:
可选参数
参数加”—“符号。
1 2 3 4 5 6 7 import argparse parser = argparse.ArgumentParser() parser.add_argument("--verbosity", help="increase output verbosity") args = parser.parse_args() if args.verbosity: print("verbosity turned on")
输出:
1 2 python3 test.py --verbosity 1 verbosity turned on
当指定 —verbosity 参数时显示某些东西,否则不显示。
如果一个可选参数没有被使用时,相关变量被赋值为 None,在此例中是 args.verbosity,这也就是为什么它在 if 语句中被当作逻辑假。
使用 —verbosity 选项时,必须指定一些值(任何值),例如本例中指定值为“1”。
action 关键词
参数只有两个值有实际意义:True 或者 False时使用。
1 2 3 4 5 6 7 8 9 import argparse parser = argparse.ArgumentParser() parser.add_argument("--verbose", help="increase output verbosity", action="store_true") args = parser.parse_args() if args.verbose: print("verbosity turned on")
输出:
1 2 python3 test.py --verbose verbosity turned on
指定了一个新的关键词 action,并赋值为 “store_true”。这意味着,当这一选项存在时,为 args.verbose 赋值为 True。没有指定时则隐含地赋值为 False。
当你为其指定一个值时,它会报错,例如:只写—verbose即可,传递任何值会报错。
短选项 1 2 3 4 5 6 7 8 import argparse parser = argparse.ArgumentParser() parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true") args = parser.parse_args() if args.verbose: print("verbosity turned on")
输出:
1 2 python3 test.py -v verbosity turned on
结合位置参数和可选参数
位置参数要注意顺序。
位置参数和可选参数顺序可以颠倒。
1 2 3 4 5 6 7 8 9 10 11 12 13 import argparse parser = argparse.ArgumentParser() parser.add_argument("square", type=int, help="display a square of a given number") parser.add_argument("-v", "--verbose", action="store_true", help="increase output verbosity") args = parser.parse_args() answer = args.square ** 2 if args.verbose: print("the square of {} equals {}".format(args.square, answer)) else: print(answer)
输出:
1 2 3 4 5 6 7 8 python3 test.py 4 16 python3 test.py 4 --verbose the square of 4 equals 16 python3 test.py 4 -v the square of 4 equals 16
count 动作
来数某一个可选参数出现了几次。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import argparse parser = argparse.ArgumentParser() parser.add_argument("square", type=int, help="display the square of a given number") parser.add_argument("-v", "--verbosity", action="count", help="increase output verbosity") args = parser.parse_args() answer = args.square ** 2 if args.verbosity == 2: print("the square of {} equals {}".format(args.square, answer)) elif args.verbosity == 1: print("{}^2 == {}".format(args.square, answer)) else: print(answer)
输出:
1 2 3 4 5 6 7 8 python3 test.py 4 16 python3 test.py 4 -v 4^2 == 16 python3 test.py 4 -vv the square of 4 equals 16
choices 关键字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import argparse parser = argparse.ArgumentParser() parser.add_argument("square", type=int, help="display a square of a given number") parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], help="increase output verbosity") args = parser.parse_args() answer = args.square ** 2 if args.verbosity == 2: print("the square of {} equals {}".format(args.square, answer)) elif args.verbosity == 1: print("{}^2 == {}".format(args.square, answer)) else: print(answer)
输出:
1 2 3 4 5 6 python3 test.py 4 -v 1 4^2 == 16 python3 test.py 4 -v 3 usage: test.py [-h] [-v {0,1,2}] square test.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)
default 关键字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import argparse parser = argparse.ArgumentParser() parser.add_argument("square", type=int, help="display a square of a given number") parser.add_argument("-v", "--verbosity", action="count", default=0, help="increase output verbosity") args = parser.parse_args() answer = args.square ** 2 if args.verbosity >= 2: print("the square of {} equals {}".format(args.square, answer)) elif args.verbosity >= 1: print("{}^2 == {}".format(args.square, answer)) else: print(answer)
输出:
1 2 3 4 5 6 7 8 python3 test.py 4 16 python3 test.py 4 -v 4^2 == 16 python3 test.py 4 -vv the square of 4 equals 16
结合使用
位置参数要注意顺序。
位置参数和可选参数顺序可以颠倒。
1 2 3 4 5 6 7 8 9 10 11 12 13 import argparse parser = argparse.ArgumentParser() parser.add_argument("x", type=int, help="the base") parser.add_argument("y", type=int, help="the exponent") parser.add_argument("-v", "--verbosity", action="count", default=0) args = parser.parse_args() answer = args.x ** args.y if args.verbosity >= 2: print("Running '{}'".format(__file__)) if args.verbosity >= 1: print("{}^{} == ".format(args.x, args.y), end="") print(answer)
输出:
1 2 3 4 5 6 7 8 9 python3 test.py 4 2 16 python3 test.py 4 2 -v 4^2 == 16 python3 test.py 4 2 -vv Running 'test.py' 4^2 == 16
矛盾的选项 add_mutually_exclusive_group() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import argparse parser = argparse.ArgumentParser() group = parser.add_mutually_exclusive_group() group.add_argument("-v", "--verbose", action="store_true") group.add_argument("-q", "--quiet", action="store_true") parser.add_argument("x", type=int, help="the base") parser.add_argument("y", type=int, help="the exponent") args = parser.parse_args() answer = args.x**args.y if args.quiet: print(answer) elif args.verbose: print("{} to the power {} equals {}".format(args.x, args.y, answer)) else: print("{}^{} == {}".format(args.x, args.y, answer))
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 python3 test.py 4 2 4^2 == 16 python3 test.py 4 2 -q 16 python3 test.py 4 2 -v 4 to the power 2 equals 16 python3 test.py 4 2 -vq usage: test.py [-h] [-v | -q] x y test.py: error: argument -q/--quiet: not allowed with argument -v/--verbose python3 test.py 4 2 -v -q usage: test.py [-h] [-v | -q] x y test.py: error: argument -q/--quiet: not allowed with argument -v/--verbose
add_mutually_exclusive_group()它允许我们指定彼此相互冲突的选项。