From 2e90007639ade975f32751d75024c0634ff858a8 Mon Sep 17 00:00:00 2001 From: asahi Date: Sat, 4 May 2024 23:00:31 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=85=E8=AF=BBargparse=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- python/argparse.md | 166 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 python/argparse.md diff --git a/python/argparse.md b/python/argparse.md new file mode 100644 index 0000000..3743df5 --- /dev/null +++ b/python/argparse.md @@ -0,0 +1,166 @@ +- [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}") +```