浅谈optparse 解析命令行参数库
使用的背景
在工作中我们经常要制定运行脚本的一些参数,因为有些东西是随着我么需求要改变的,所以在为们写程序的时候就一定不能把写死,这样我们就要设置参数
在python中我们可以通过sys 模板的argv 但是这模板功能远没有今天我们介绍的optparse模块强大。
介绍下最基本的用法:
- 使用optionparser模块来解析
- optionparser的执行过程:
- 导入optionparser : from optparse import OptionParser构造optionparser的对象:parser = OptionParser()
- 往optionparser对象中增加option :parser.add_option()
- 调用optionparser的解析函数:(options, args) = parser.parse_args()在options中使用解析到的options,在args中使用其他的args。
下面我们写个用例脚本进行简单的说明:
-
首先我们要导入模块 from optparse import OptionParser
- 创建一个 用户help说明的文档参数 (这个是可选的)
usage="myprog [-f<filename>][-s<xyz>]arg1[,arg2..]"
- 创建一个实例对象 optParser=OptionParser(usage)
4. 在对象中增加参数选项 optParser.add_option("-f","--file",action="store",type="string",dest="filename",help='-f参数说明信息 ')
optParser.add_option("-v","--version",action="store_false",dest="verbose",default="None",help="-v参数说明信息",)
5.调用optionparser的解析函数 让用户输入的命令保存在optParser.parse_args(y) y中 options,args=optParser.parse_args()
整体的脚本
from optparse import OptionParser
usage="myprog [-f<filename>][-s<xyz>]arg1[,arg2..]"
optParser=OptionParser(usage)
optParser.add_option("-f","--file",action="store",type="string",dest="filename")
optParser.add_option("-v","--vison",action="store_false",dest="verbose",default="none",help="make losts of noise [default]")
fakeArgs=['-f',"file.txt",'-v','good luck to you','arg2','arg']
options,args=optParser.parse_args(fakeArgs)
print options.filename
print args
print options.verbose
运行结果:
分析 因为我们传入了参数-f文件名为 file.txt.当我们条用options.filenmae 时就显示我们的传入的文件名为file.txt
我们传入的参数没有被脚本调用被传入了ARGS 列表中
因为我们第一action 为 store_false 所以不管-v传入什么参数。verbose的值都没false(store_ture 相反)
实例:
1 from optparse import OptionParser 2 optParser = OptionParser() 3 optParser.add_option("-n","--number",action = "store",type="int",dest = "intNumber") 4 optParser.add_option("-v","--version", action="store_false", dest="verbose",default='gggggggg',help="no help") 5 options, args = optParser.parse_args() 6 if options.intNumber is not None: 7 #num = options.intNumber 8 print options.intNumber,options.verbose 9 10 else: 11 for i in range(1,5): 12 #num = i 13 print i
结果
注意一点当你设置action_false 如果没有传入参数测不生效。如看上面第一次执行