python小專題——optparse模組

來源:互聯網
上載者:User

淺談optparse模組

  最近遇到一個問題,是指定參數來運行某個特定的進程,這很類似Linux中一些命令的參數了,比如ls -a,為什麼加上-a選項會響應。optparse模組實現的也是類似的功能,它是為指令碼傳遞命令參數。

  使用此模組前,首先需要匯入模組中的類OptionParser,然後建立它的一個執行個體(對象):

from optparse import OptionParserparser = OptionParser()  #這裡也可以定義類的參數,後續有

   接著就可以添加選項了,基本文法:

parser.add_option(opt_str, ...,   
attr=value, ...)

    每個opt_str可以有多個選項字串,比如-f 和--file(就行Linux命令列中ls -a和ls --all效果一樣),只要定義了這些選項,則在命令列輸入的時候這些選項就會被識別,否則報錯。opt_str的定義可以如下:

parser.add_option("-f", "--file", ...)  #-f 和 --file 是作為調用時的參數的標籤,會被識別

   當選項被定義好後,則可以調用parse_args()函數來擷取我們定義的選項和參數

(options, args) = parser.parse_args() #parse_args可以有參數,不定義的話使用預設的sys.argv[1:]

   parse_args()返回兩個值,一個是選項options(如:-f),另一個是參數args,即除選項options以外的值(如:test.txt)

  add_option中最重要的四個option的屬性是:action,type,dest(destination),help。這四個中action又是最基礎的。

  action參數(附帶介紹了type、dest)

      action參數告訴optparse該做什麼當它在命令列中遇到選項時。action有三種儲存方式:store、store_false、store_true。如果不指定action的值,預設的是store,它告訴optparse將繼續讀取下一個參數(type),保證類型的正確性,並將它將值儲存在一個變數(dest)中,即將命令列中輸入的字串將它存為options的屬性,這樣可以直接調用。囉嗦了一大堆,我自己都被搞暈了~~~~,先看個例子吧!

>>> parser.add_option("-f", "--file",action="store", type="string", dest="filename")<Option at 0x2d72f48: -f/--file>>>> args = ["-f", "foo.txt"] #這個是類比命令列的輸入>>> (options, args) = parser.parse_args(args)>>> options.filename'foo.txt'

 

上述:當optparse看到選項-f時,它將繼續讀下一個參數是foo.txt,並將它儲存在options.filename(這個filename就是add_option中的dest),之後dest的值將作為parser的屬性被儲存。所以,當調用parse_args函數時,options.filename的值就是foo.txt。這個是以“string”類型儲存的,當然type也可以是int和float等,比如下面的:

parser.add_option("-n", type="int", dest="num")

注意,這個沒有指定一個長字串的選項(如:--number),這當然是可以的,不過命令列輸入時選項就只能是-n了,也沒有指定action,使用預設的“store”。再次使用類比的命令列參數["-n22"](一個參數),也可以寫成["-n  22"](作為兩個參數來傳遞):

>>> parser.add_option("-n", type="int", dest="num")<Option at 0x2d71308: -n>>>> (options, args) = parser.parse_args(["-n22"])>>> print options .num22

  如果不指定type參數,預設的是string類型,所以一個最簡單的方式可以寫成這樣:

parser.add_option("-f", dest="filename") 

  action另兩種值分別是:“store_true”和“store_false”,這一般作為一個標記使用,例如開始運行一個程式時將flag設為True,退出時將flag設為False。看了下面的例子就全明白了:當選項遇到v時,它將options.verbose設為True,當選項遇到q時,它將options.verbose設為False:

>>> from optparse import OptionParser>>> parser=OptionParser()>>> parser.add_option("-v", action="store_true", dest="verbose")<Option at 0x2ceb888: -v>>>> parser.add_option("-q", action="store_false", dest="verbose")<Option at 0x2d68e48: -q>>>> fakeArgs = ['-v','hello']>>> options, args = parser.parse_args(fakeArgs)>>> options.verboseTrue>>> fakeArgs = ['-q','bye bye']>>> options, args = parser.parse_args(fakeArgs)>>> options.verboseFalse#如果同時寫兩個選項v和q,它會以哪個為準呢,我試了一下,是以最後出現的為準,呵呵~~>>> fakeArgs = ['-q','bye bye','-v','hello']>>> options, args = parser.parse_args(fakeArgs)>>> options .verboseTrue

  Default參數:

default參數很好理解了,即當沒有指定dest的值時,給出個預設值,如下:

>>> parser.add_option("-x", action="store", dest="verbose", default="hahaha")<Option at 0x2d77148: -x>>>> options, args = parser.parse_args() #這裡沒有傳參數>>> options.verbose'hahaha'

如果這樣的話,那下面這兩句的效果就一樣了(前提是不給parse_args()函數傳參:) 

parser.add_option("-v", action="store_true", dest="verbose")parser.add_option("-q", action="store_false", dest="verbose", default=True)

  help參數:

這個參數是為了讓我們定義的“命令”更為逼真,還提供了協助訊息了呢!呵呵~~簡單用法如下:

>>> from optparse import OptionParser>>> usage = "myprog[ -f <filename>][-s <xyz>] arg1[,arg2..]">>> parser=OptionParser(usage) #這裡為類添加了參數usage>>> optParser.add_option("-f","--file",action = "store",type="string",dest = "fileName",help="no any help")<Option at 0x2bdb888: -f/--file>>>> fakeArgs = ['-f','file.txt']>>> options, args = parser.parse_args(fakeArgs)>>> options.fileName'file.txt'>>> parser.print_help()Usage: myprog[ -f <filename>][-s <xyz>] arg1[,arg2..]Options:  -h, --help            show this help message and exit  #此兩行根據option自動產生,比較智能額~~  -f FILENAME, --file=FILENAME                        no any help  #這是我定義的協助資訊(呵呵,不太友好~~)>>> parser.print_usage()Usage: myprog[ -f <filename>][-s <xyz>] arg1[,arg2..]  #這是類的usage資訊~~很逼真,有木有?>>> 

  

  上述是介紹基本的文法,下面舉兩個例子,一個是網上找的一個類比命令列的參數的例子,另一個是“真實”的例子~~~

  Example1:

 

from optparse import OptionParserusage = "myprog[ -f <filename>][-s <xyz>] arg1[,arg2..]"optParser = OptionParser(usage)optParser.add_option("-f","--file",action = "store",type="string",dest = "fileName")ooptParser.add_option("-v","--vison", action="store_false", dest="verbose",default='None',                     help="make lots of noise [default]")fakeArgs = ['-f','file.txt','-v','good luck to you', 'arg2', 'arge']  options, args = optParser.parse_args(fakeArgs)print options.fileNameprint options.verboseprint optionsprint argsprint optParser.print_help()

 

  運行結果是:

file.txtFalse{'verbose': False, 'fileName': 'file.txt'}['this is some what', 'arg2', 'arge']Usage: myprog[ -f <filename>][-s <xyz>] arg1[,arg2..]Options:  -h, --help            show this help message and exit  -f FILENAME, --file=FILENAME  -v, --vison           make lots of noise [default]

  Example2:

一個簡單的例子,就是將給指令碼傳選項n時,則輸出的是n的參數的值,否則給出預設值(指令碼儲存在E盤):

from optparse import OptionParseroptParser = OptionParser()optParser.add_option("-n","--number",action = "store",type="int",dest = "intNumber")optParser.add_option("-v","--version", action="store_false", dest="verbose",default='gggggggg',help="no help")options, args = optParser.parse_args()if options.intNumber is not None:  #當有選項n時,則使用給出的參數值    #num = options.intNumber    print options.intNumber,options.verboseelse:    for i in range(1,5):  #不給選項n的情況下,預設輸出的是1~4        #num = i        print i 

開啟cmd運行如下:

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.