argparse
argparse是用来解析命令行选项、参数和子命令的解析器。替代了之前的命令行解析库getopt和optparse,至于替换的原因以及argparser的优势详见:
argparse - New Command Line Parsing Module
Why use argparse rather than optparse?
大体意思是:argparse可以提供支持位置参数、子命令、必须选项、"/f"和"+rgb"等选项语法、零个或多个或者一个或多个的参数选项等其他更加丰富灵活的用法。
使用方法
基础
首先写一个简单的不处理任何参数的例子,写一个测试文件test.py:
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
在命令行中执行test.py文件
D:\MyProject\pythonProjects>python test.py
D:\MyProject\pythonProjects>python test.py --help
usage: test.py [-h]
optional arguments:
-h, --help show this help message and exit
D:\MyProject\pythonProjects>python test.py foo
usage: test.py [-h]
test.py: error: unrecognized arguments: foo
其中:
- 如果在命令行中test.py后不跟任何参数的话,则标准输出为空;
--help或者-h
命令获得帮助信息,是唯一不用指定具体参数的选项;- test.py 后制定其他参数会报错,返回错误信息。
位置参数
例子,test.py:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)
运行代码:
D:\MyProject\pythonProjects>python test.py
usage: test.py [-h] echo
test.py: error: the following arguments are required: echo
D:\MyProject\pythonProjects>python test.py -h
usage: test.py [-h] echo
positional arguments:
echo
optional arguments:
-h, --help show this help message and exit
D:\MyProject\pythonProjects>python test.py foo
foo
其中:
- 上述代码中使用
add_argument()
方法指定一个程序接收的命令行选项; - 这时在命令行中调用test.py,后必须指定一个选项参数;
parse_args()
方法则返回命令行中为选项指定的数据;- 位置选项也成为返回数据的属性名,通过属性名可以获取数据;
上述帮助命令,返回信息可以知道echo是一个未知参数,但是其具体如何使用无法得知,为了使其更加丰富易懂,可以在
add_argument()
内添加其他的属性。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo", help="echo the string you use here")
args = parser.parse_args()
print(args.echo)
执行命令:
D:\MyProject\pythonProjects>python test.py -h
usage: test.py [-h] echo
positional arguments:
echo echo the string you use here.
optional arguments:
-h, --help show this help message and exit
例子2,对命令行输入的参数求平方:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number")
args = parser.parse_args()
print(args.square**2)
运行结果:
D:\MyProject\pythonProjects>python test.py 4
Traceback (most recent call last):
File "test.py", line 14, in <module>
print(args.square**2)
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
命令出错,因为argparse默认将我们传递的选项参数当作字符串,除非指明其参数类型,如下:
D:\MyProject\pythonProjects\violent_python\ch3>python test.py 4
16