python中使用optparse模块简化命令行编写的复杂度
python中的optparse模块用来编写命令行工具非常实用,下面通过一个例子来阐述一下。
?
----------------------------
person.py 模块:
?
-n/--name | the person's name
-a/--age | the person's age
-j/--job | the psrson's job
?
--------------------------------
?
#!/usr/bin/env pythonfrom optparse import OptionParserimport sysdef main(): p = OptionParser() p.add_option('-n','--name',dest='person_name',help='person\'s name',default='person1') p.add_option('-a','--age',default=30, help='person\'s age') p.add_option('-j','--job',default='software engineer', help='person\'s job') options, args = p.parse_args() print 'Hello %s' %options.person_name, ', age is %d' %int(options.age), ',job is %s' %options.jobif __name__ == '__main__': main()
?
先来看看OptionParser中的add_option方法,这个方法可以添加命令行参数,支持常见的参数形式,一种是以一个‘-’开头的并跟一个单词的首写字母,另外一个是一‘--’开头的跟一个单词的全称。
?
parse_args()返回两个值:
?
一个是所有可选参数的字典,记录了可选参数以及可选参数对应的值,另外一个是位置参数的列表。在本例中,变量options得到的就是可选参数以及可选参数对应的值,类型为字典。args包含了位置参数的列表。
?
后面的key-work参数可以提供:
?
1)参数的默认值,用default关键字表示,比如default='person1'表示如果没有提供-n/--name,则这个选项的默认值就是person1.
2) 选项的属性,如果没有dest,则用默认的--后面的作为选项的属性,比如对age选项的添加,这里没有dest,所以用age作为默认的属性,可以用options.age得到它的值
3) 对某个选项的帮助信息,用help关键字表示
?
看一下代码的输出:
?
[wangxf@localhost exec]$ ./person.py
Hello person1 , age is 30 ,job is 30
?
?
[wangxf@localhost exec]$ ./person.py -h
Usage: person.py [options]
Options:
? -h, --help??????????? show this help message and exit
? -n PERSON_NAME, --name=PERSON_NAME
??????????????????????? person's name
? -a AGE, --age=AGE???? person's age
? -j JOB, --job=JOB???? person's job
?
?
[wangxf@localhost exec]$ ./person.py --name xiaoxiao
Hello xiaoxiao, age is 30 ,job is 30
?
?
?
?
?