[1]optparse是一个python库,可以帮助我们去解析终端中输入的命令,这样就可以让自己的python程序有类似于命令行软件的效果了。
如何使用
首先从这个库中import OptionParser这个类,在程序的一开始就生成一个对象。
|
|
接下来就可以用parser.add_option
方法定义命令的选项了
|
|
对每个选项,至少用一个字符串命名,可以有很多个名字,如parser.add_option("-f", "--file", ...)
,一般我们会用一个短字符串和一个长字符串命名。
针对每一个选项,parser.add_option()
方法的参数有:(注意,并不意味着它们可以全部一起出现)
- action 当选项出现后optparse的行为
- type 选项后面跟着的输入值的数据类型
- dest 存储数据的目的地——options的成员变量
- default 赋值给dest参数对应变量的初始化值
- append 把选项后跟着的参数增加到dest中
- nargs 有多少个数据类型参数type,
- const 当action是存储一个常数时,该常数的值
- help 当用户调用-h选项时,该选项对应的帮助文字
- metavar 元变量,用于在help文档中表示选项后面跟着的参数
定义好命令的所有选项后,再调用对象的parse_args
方法解析输入的命令行即可。
|
|
add_option()的参数action
这个参数表示当命令行输入了某个选项后,optparse会做什么事情,绝大部分action都是存储行为:把值存到变量里。下面列列举几个常用的参数action
的值。
1.action="store"
在命令行中该选项后边必须跟着一个参数,把这个参数转换为指定的数据类型,存储到dest对应的变量中。当action缺省时,默认值是store
。
|
|
命令解析后,我们在程序中便可以用options.filename
来调用此字符串变量。(type
除了字符串还可以是其他的数据类型。当type缺省时,默认值为string
。)
2.action="store_const"
选项后无参数。存储一个常数到dest参数对应的变量中,这个常数由const参数指定。
|
|
3.action="store_true" / "store_false"
选项后无参数。该行为存储布尔型变量到dest参数对应的变量中,一般作为flag标志。
|
|
4.action="append"
选项后跟着1个或多个参数(参数的个数由nargs指定,选项后参数的个数要和nargs完全一致)。该行为会把参数增加到dest参数对应的变量中。
|
|
5.action="count"
选项后无参数。该行为使dest参数对应的变量++,若dest参数对应的变量没有被default参数初始化,则默认为0。
|
|
帮助文档
optparse能自动生成帮助和使用说明文档,我们只需要给help
参数赋值完成就好了。例如:
|
|
当我们在命令行输入<yourscript> -h
(或--help)后,便会出现
Usage: <yourscript> [options] arg1 arg2
Options:
-h, --help show this help message and exit
-v, --verbose make lots of noise [default]
-q, --quiet be vewwy quiet (I'm hunting wabbits)
-f FILE, --filename=FILE
write output to FILE
-m MODE, --mode=MODE interaction mode: novice, intermediate, or
expert [default: intermediate]
其中,
usage
参数为-h
之后显示的第一行文字;%prog
返回当前程序的文件名;%default
返回当前选项的dest
对应变量的默认值;- 而提供给选项的参数称为元变量,在add_option()方法中用参数
metavar
表示,若缺省,则默认值为dest
参数对应的变量名的大写形式。
错误处理
提前判断可能出错的情况后,我们可以通过optparse的parser.error("")
方法向用户输出错误信息。例如,在options.a
和options.b
不能同时为真的情况下,若同时为真,则输出错误信息。
|
|
这将在终端输出程序的正确用法usage以及错误信息。
# 这里的-n选项的参数应该为整型类型
$ /usr/bin/foo -n 4x
Usage: foo [options]
foo: error: option -n: invalid integer value: '4x'