Python 有兩個內建的模塊用於處理命令行參數:
一個是 getopt,《Deep in python》一書中也有提到,只能簡單處理 命令行參數;
另一個是 optparse,它功能強大,而且易於使用,可以方便地生成標准的、符合Unix/Posix 規范的命令行說明。
使用optionparser模塊來解析
optionparser的執行過程:
1、導入optionparser : from optparse import OptionParser
2、構造optionparser的對象:parser = OptionParser()
3、往optionparser對象中增加option :parser.add_option(...),添加的內容是命令行參數,及相關的幫助信息
每個命令行參數由參數名字符串和參數屬性組成,如-f或者file分別表示長短參數名:
parser.add_option("-f", "--file", ...)
4、調用optionparser的解析函數:
(options, args) = parser.parse_args()
5、在options中使用解析到的options,在args中使用其他的args。
options是一個字典,其key值是app_options()函數中的dest屬性的參數值;value值對應的是app_options()函數中的defalut屬性的參數值,或者是由命令行傳入的參數
args是由positional arguments組成的列表
示例如下:
from optparse import OptionParser optParser = OptionParser() optParser.add_option('-f','--file',action = 'store',type = "string" ,dest = 'filename') optParser.add_option("-v","--vison", action="store_false", dest="verbose", default='hello',help="make lots of noise [default]") #optParser.parse_args() 剖析並返回一個字典和列表, #字典中的關鍵字是我們所有的add_option()函數中的dest參數值, #而對應的value值,是add_option()函數中的default的參數或者是 #由用戶傳入optParser.parse_args()的參數 fakeArgs = ['-f','file.txt','-v','how are you', 'arg1', 'arg2'] option , args = optParser.parse_args() op , ar = optParser.parse_args(fakeArgs) print("option : ",option) print("args : ",args) print("op : ",op) print("ar : ",ar)
輸出結果:
option : {'filename': None, 'verbose': 'hello'} args : [] op : {'filename': 'file.txt', 'verbose': False} ar : ['how are you', 'arg1', 'arg2']
注意:我們對optParser.parser_args()函數傳入參數列表和沒有傳入參數列表的區別。在上述使用fakeArgs參數列表代替了我們在命令行輸入的參數。如果我們在shell中運行這個代碼,會如此傳參:
add_option函數分析:
add_option()參數說明: action:存儲方式,分為三種store、store_false、store_true type:類型 dest:存儲的變量 default:默認值 help:幫助信息
action的取值有那么多,我么着重說三個store、store_false、store_true 三個取值。 action默認取值store。
--store 上表示命令行參數的值保存在options對象中。例如上面一段代碼,如果我們對optParser.parse_args()函數傳入的參數列表中帶有‘-f’,那么就會將列表中‘-f’的下一個元素作為其dest的實參filename的值,他們兩個參數形成一個字典中的一個元素{filename:file_txt}。相反當我們的參數列表中沒有‘-f’這個元素時,那么filename的值就會為空。
--store_false fakeArgs 中存在'-v'verbose將會返回False,而不是‘how are you’,也就是說verbose的值與'-v'的后一位無關,只與‘-v’存在不存在有關。
--store_ture 這與action="store_false"類似,只有其中有參數'-v'存在,則verbose的值為True,如果'-v'不存在,那么verbose的值為None