使用的背景
在工作中我們經常要制定運行腳本的一些參數,因為有些東西是隨着我么需求要改變的,所以在為們寫程序的時候就一定不能把寫死,這樣我們就要設置參數
在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 如果沒有傳入參數測不生效。如看上面第一次執行