1. 程式人生 > >Python學習筆記之optparse模組OptionParser

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