- [argparse](#argparse) - [位置参数](#位置参数) - [可选项参数](#可选项参数) - [store\_true](#store_true) - [短选项](#短选项) - [为可选参数指定type](#为可选参数指定type) - [choice](#choice) - [count](#count) - [add\_mutually\_exclusive\_group](#add_mutually_exclusive_group) - [指定命令行描述](#指定命令行描述) # argparse 通过argparse模块,可以针对命令行参数进行解析。 ## 位置参数 ```py import argparse parser = argparse.ArgumentParser() parser.add_argument("echo", help="echo the string you use here") args = parser.parse_args() print(args.echo) ``` ## 可选项参数 ### store_true 通过将action指定为`store_true`,当命令行参数中出现该可选参数时,`args.{opt_flag_name}`值为True,否则为False ```py 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") ``` ### 短选项 可以为可选参数指定段选项,令`-v`和`--verbose`达到相同的效果 ```py 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") ``` ### 为可选参数指定type 为可选参数指定type后,可选参数后必须跟随一个整数值。 ```py 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, help="increase output verbosity") args = parser.parse_args() answer = args.square**2 if args.verbosity == 2: print(f"the square of {args.square} equals {answer}") elif args.verbosity == 1: print(f"{args.square}^2 == {answer}") else: print(answer) ``` ### choice 可以通过为可选参数指定`choice`来限定可选参数值范围 ```py 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(f"the square of {args.square} equals {answer}") elif args.verbosity == 1: print(f"{args.square}^2 == {answer}") else: print(answer) ``` ### count 可以将可选参数的action指定为`count`,此时`args.{opt_flag_name}`的值将为该可选参数出现的次数,如未指定该可选参数,值为None。 ```py 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(f"the square of {args.square} equals {answer}") elif args.verbosity == 1: print(f"{args.square}^2 == {answer}") else: print(answer) ``` 如果想要在未指定可选参数时,为该参数指定一个默认值,可以使用`default`: ```py 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(f"the square of {args.square} equals {answer}") elif args.verbosity >= 1: print(f"{args.square}^2 == {answer}") else: print(answer) ``` ### add_mutually_exclusive_group 通过`add_mutually_exclusive_group`,可以指定彼此之间相互冲突的选项: ```py 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(f"{args.x} to the power {args.y} equals {answer}") else: print(f"{args.x}^{args.y} == {answer}") ``` 此时,`-v`和`-q`为冲突的可选参数,无法同时指定 ## 指定命令行描述 ```py import argparse parser = argparse.ArgumentParser(description="calculate X to the power of Y") 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(f"{args.x} to the power {args.y} equals {answer}") else: print(f"{args.x}^{args.y} == {answer}") ```