1. 导入模块和创建解析器
argparse
是 Python 标准库中用于命令行参数解析的模块。你首先需要导入 argparse
,然后创建一个 ArgumentParser
对象,该对象将负责解析命令行参数。
(感觉和Java中,main 方法的 String[] args
有点像,但Py的功能强大很多)
python
import argparse
parser = argparse.ArgumentParser()
2. 添加位置参数
位置参数是指在命令行中必须按顺序提供的参数。这些参数的顺序非常重要,程序会根据顺序来解析它们。
示例 1:基本的命令行参数
python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)
运行结果:
bash
python prog.py hello
hello
在这个例子中,echo
是一个位置参数,用户必须提供它。parse_args()
会将命令行中提供的值存储在 args
对象中,并且可以通过 args.echo
来访问它。
示例 2:给位置参数添加帮助信息
python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo", help="Echo the string you provide")
args = parser.parse_args()
print(args.echo)
运行结果:
bash
python prog.py --help
usage: prog.py [-h] echo
prog.py: error: the following arguments are required: echo
这将为 echo
参数提供详细的帮助信息,帮助用户理解该参数的作用。
3. 添加可选参数
可选参数不需要按顺序提供,通常以 --
开头。你可以为它们指定默认值或指定 type
来限制输入。
示例 3:基本的可选参数
python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="Increase output verbosity")
args = parser.parse_args()
if args.verbosity:
print("verbosity turned on")
运行结果:
bash
python prog.py --verbosity
verbosity turned on
在这个例子中,--verbosity
是一个可选参数。当用户指定该选项时,程序会打印一条消息。
示例 4:带有 store_true
的可选参数
如果你只想要一个标志,argparse
提供了 action="store_true"
,如果指定该参数,则将值设置为 True
,否则为 False
。
python
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")
运行结果:
bash
python prog.py --verbose
verbosity turned on
如果不指定 --verbose
,程序就不会打印任何东西。
4. 位置参数与可选参数的组合
你可以将位置参数和可选参数结合起来使用。
示例 5:结合位置参数和可选参数
python
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(f"The square of {args.square} is {answer}")
else:
print(answer)
运行结果:
bash
python prog.py 4
16
python prog.py 4 --verbose
The square of 4 is 16
在这个例子中,square
是位置参数,-v
或 --verbose
是可选参数。若提供 -v
,程序将输出更详细的结果。
5. 参数类型
默认情况下,argparse
会将所有传递给参数的值视为字符串,但你可以指定其他类型,例如 int
、float
等。
示例 6:指定类型
python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("number", type=int, help="A number to square")
args = parser.parse_args()
print(args.number**2)
运行结果:
bash
python prog.py 4
16
在这个例子中,number
参数的类型被指定为 int
,因此输入的字符串会被转换为整数。
6. 选择特定的值
你可以通过 choices
参数限制某个可选参数接受的值。
示例 7:限制可选参数的值
python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", choices=[0, 1, 2], help="Set verbosity level")
args = parser.parse_args()
print(f"Verbosity level: {args.verbosity}")
运行结果:
bash
python prog.py --verbosity 1
Verbosity level: 1
python prog.py --verbosity 3
usage: prog.py [-h] [-v {0,1,2}]
prog.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)
7. 计数标志
如果你希望某个可选参数通过出现的次数来控制某些行为,你可以使用 action="count"
。
示例 8:计数标志
python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", action="count", help="Increase verbosity")
args = parser.parse_args()
print(f"Verbosity level: {args.verbosity}")
运行结果:
bash
python prog.py
Verbosity level: None
python prog.py -v
Verbosity level: 1
python prog.py -vv
Verbosity level: 2
8. 默认值
当你没有指定参数时,可以为参数提供默认值。
示例 9:使用默认值
python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", action="count", default=0, help="Increase verbosity")
args = parser.parse_args()
print(f"Verbosity level: {args.verbosity}")
运行结果:
bash
python prog.py
Verbosity level: 0
python prog.py -v
Verbosity level: 1
在这个例子中,当没有指定 -v
参数时,args.verbosity
的默认值为 0
。