阅读argparse文档
This commit is contained in:
166
python/argparse.md
Normal file
166
python/argparse.md
Normal file
@@ -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}")
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user