167 lines
5.3 KiB
Markdown
167 lines
5.3 KiB
Markdown
- [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}")
|
||
```
|