Python學習筆記之optparse模組OptionParser
一、基本用法 optparse,是一個更夠讓程式設計人員輕鬆設計出簡單明瞭、易於使用、符合標準的Unix命令例程式的Python模組。生成使用和幫助資訊
首先你必須匯入該類,並建立一個OptionParser物件,然後再使用parser.add_option(...)待定義命令列引數,及其幫助文件。
每個命令列引數就是由引數名字串和引數屬性組成的。如 -f 或者 file 分別是長短引數名:
parser.add_option("-f", "--file", ...)
當你將所有的命令列引數都定義好了的時候,我們需要呼叫parse_args()方法賴際熙add_option()函式依次傳入的引數:
options,args = parser.parser_args()
options 是一個字典,其key字典中的關鍵字可能會是是我們所有的add_option()函式中的dest引數值,其對應的value值,是命令列輸入的對應的add_option()函式的引數值。
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:幫助資訊
1、action
我們先來看看原始碼中的action取值
# The set of actions that involve storing a value somewhere;
# also listed just for constructor argument validation. (If
# the action is one of these, there must be a destination.)
STORE_ACTIONS = ("store",
"store_const",
"store_true",
"store_false",
"append",
"append_const",
"count")
action的取值有那麼多,我麼著重說三個store、store_false、store_true 三個取值。 action預設取值store。 --store 上表示命令列引數的值儲存在options物件中。例如上面一段程式碼,如果我們對optParser.parse_args()函式傳入的引數列表中帶有‘-f’,那麼就會將列表中‘-f’的下一個元素作為其dest的實參filename的值,他們兩個引數形成一個字典中的一個元素{filename:file_txt}。相反當我們的引數列表中沒有‘-f’這個元素時,那麼filename的值就會為空('filename': None)。
--store: 引數列表中帶有'-f', 那麼就會將 下一個元素作為 其dest 實參 filename的值; 沒有'-f' ,那麼對應的filename就為None
--store_true: 引數列表中有'-v', 那麼其dest實參verbose的值就為True; 否者就為預設值hello
--store_false: 引數列表中有'-v', 那麼其dest實參verbose的值就為False; 否者就為預設值hello