python optparse模塊使用實(shí)例
使用命令行時(shí),如果要添加選項(xiàng)的話,python 2.3里新增加了一個(gè)模塊叫optparse,也是專門來(lái)處理命令行選項(xiàng)的。
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-p", "--pdbk", action="store_true",
dest="pdcl",
default=False,
help="write pdbk data to oracle db")
parser.add_option("-z", "--zdbk", action="store_true",
dest="zdcl",
default=False,
help="write zdbk data to oracle db")
(options, args) = parser.parse_args()
if options.pdcl==True:
print 'pdcl is true'
if options.zdcl==True:
print 'zdcl is true'
add_option用來(lái)加入選項(xiàng),action是有store,store_true,store_false等,dest是存儲(chǔ)的變量,default是缺省值,help是幫助提示
最后通過(guò)parse_args()函數(shù)的解析,獲得選項(xiàng),如options.pdcl的值。
基本使用流程:
》1.產(chǎn)生一個(gè) optparse.OptionParser 的物件??梢栽诋a(chǎn)生時(shí)將"程式的命令列說(shuō)明" (usage) 做為參數(shù),交給 OptionParser 的建構(gòu)子:
from optparse import OptionParser
MSG_USAGE = "myprog[ -f <filename>][ -s <xyz>] arg1[, arg2...]"
optParser = OptionParser(MSG_USAGE)
》2.呼叫 OptionParser.add_option() 加入接受的 option:
optParser.add_option("-f",
"--file",
action = "store",
type = "string",
dest = "fileName")
參數(shù) action 有許多種類,預(yù)設(shè)是 "store",所以即使省略也無(wú)妨,其它的 action 種類在下面會(huì)繼續(xù)說(shuō)明。
若有一個(gè)以上的 option,重覆上述的方式加入(注意:以下省略了 action 參數(shù)):
optParser.add_option("-s",
"--someopt",
type = "string",
dest = "someopt")
》3.呼叫 OptionParser.parse_args() 進(jìn)行解讀。如果沒有傳入?yún)?shù), OptionParser 預(yù)設(shè)會(huì)以 sys.argv[1:] 為對(duì)象進(jìn)行解讀。OptionParser.parse_args() 會(huì)傳回一個(gè) tuple,由 optparse.Values 和 一個(gè) list 所組成。下例傳入一個(gè)假造的參數(shù)列:
fakeArgs = ['-f', 'thefile.txt', '-s', 'xyz', 'arg1', 'arg2', 'arge']
options, args = optParser.parse_args(fakeArgs)
print options.fileName
print options.someopt
print args
最後會(huì)得到的輸出結(jié)果:
thefile.txt
xyz
['arg1', 'arg2', 'arge']
這是一個(gè)簡(jiǎn)單的範(fàn)例,說(shuō)明了 OptionParser 的一般使用方式。透過(guò)這個(gè)例子,可以看到如果為程式加入 option, 並且在程式中取得 option argument 和 positional argument。OptionParser.parse_args() 還有許多用法,下面會(huì)說(shuō)明一部份。
為程式加入 flag option:
許多的 Unix 命令擁有 "-v", "-q" 的 option,代表"提供詳細(xì)訊息"或是"不顯示訊息"。要做到這一點(diǎn),只要在程式中加入下列的 option :
parser.add_option("-v", action="store_true", dest="verbose")
parser.add_option("-q", action="store_false", dest="verbose")
opts, args = parser.parse_args()
第一個(gè) add_option() 加入了一個(gè) "-v" 的 option;如果命令列參數(shù)中出現(xiàn)了 "-v",則 opts.verbose 將會(huì)是 True;相反的,第二個(gè) add_option() 加入了一個(gè) "-q" option;如果命令列參數(shù)中出現(xiàn)了 "-q",則 opts.verbose 將會(huì)是 False,這兩者並不相悖,程式可以設(shè)計(jì)成:當(dāng)收到 "-v" 時(shí),顯示詳細(xì)訊息;當(dāng)收到 "-q" 時(shí),顯示概略訊息,或完全不顯示;當(dāng)兩者都沒有收到,則顯示一般的訊息。
設(shè)定 option 的預(yù)設(shè)值:
上述的例子都假設(shè)命令例會(huì)收到預(yù)期中的 option,那麼如果沒有 option 時(shí),接收到的 option 值會(huì)是什麼呢?答案是 None!如果想為 option 提供預(yù)設(shè)值,只要在 OptionParser.parse_args()中指定參數(shù) default 就行了:
parser.add_option("-v", action="store_true", dest="verbose", default = True)
parser.add_option("-q", action="store_false", dest="verbose")
opts, args = parser.parse_args()
上述的程式碼為程式加入了兩個(gè) option,當(dāng) "-v" 沒有出現(xiàn)時(shí), opts.verbose 預(yù)設(shè)值為 True;當(dāng) "-q" 被指定時(shí), opts.verbose 被設(shè)定為 False,和上一個(gè)例子有點(diǎn)不同。再看下一個(gè)例子:
parser.add_option("-v", action="store_true", dest="verbose", default=False)
parser.add_option("-q", action="store_false", dest="verbose", default=True)
opts.verbose 的預(yù)設(shè)值會(huì)是什麼?答案是 True,最後一個(gè)指定到同一個(gè)目標(biāo)的 option 預(yù)設(shè)值會(huì)被採(cǎi)用。
一般的 option 亦可加入預(yù)設(shè)值:
parser.add_option("-f", action="store", dest="fileName", default = "defaultConfig.txt")
為程式加入說(shuō)明:
標(biāo)準(zhǔn)的 Unix 命令大多有著 "-h", "--help" 的 option,會(huì)將使用說(shuō)明印出來(lái)。在 OptionParser.parse_args() 中指定 "help" 參數(shù),並指定說(shuō)明的字串,就可以為這個(gè) option 加入說(shuō)明了:
parser.add_option("-v",
action="store_true",
dest="verbose",
default=False,
help="make lots of noise [default]")
當(dāng)程式收到 "-h" 或 "--help",交給 OptionParser 解讀時(shí),會(huì)自動(dòng)印出說(shuō)明內(nèi)容,而忽略其它的 argument:
usage: <yourscript> [options] arg1 arg2
options:
-h, --help show this help message and exit
-v, --verbose make lots of noise [default]
-q, --quiet be vewwy quiet (I'm hunting wabbits)
-fFILE, --file=FILE write output to FILE
-mMODE, --mode=MODE interaction mode: one of 'novice', 'intermediate'
[default], 'expert'
還記得一開始提到交給 OptionParser 建構(gòu)子的參數(shù) MSG_USAGE 嗎? optparse 套件對(duì) usage 訊息也提供了一些支援。在 usage 中使用 "%prog" 關(guān)鍵字, OptionParser 會(huì)自動(dòng)將其代換為程式名,即 sys.args[0]:
usage = "usage: %prog [options] arg1 arg2"
如果程式名為 "myprog",則出現(xiàn)在 help 訊息中的 usage 就會(huì)是:
usage = "usage: myprog [options] arg1 arg2"
如果OptionParser 建構(gòu)子沒有收到任何參數(shù),則會(huì)自動(dòng)產(chǎn)生一個(gè) usage 訊息:
"usage: %prog [options]"
前提是程式?jīng)]有 positional argument。甭?lián)?option 在 help 訊息中排列的方式, OptionParser 會(huì)搞定一切,如同前面程式所示。
相關(guān)文章
解決運(yùn)行django程序出錯(cuò)問(wèn)題 ''str''object has no attribute''_meta''
這篇文章主要介紹了解決運(yùn)行django程序出錯(cuò)問(wèn)題 'str'object has no attribute'_meta',具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07python實(shí)現(xiàn)字母閃爍效果的示例代碼
本文主要介紹了python實(shí)現(xiàn)字母閃爍效果的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08Python使用wxPython和PyMuPDF實(shí)現(xiàn)合并PDF文檔
處理大量的PDF文檔可能會(huì)變得復(fù)雜和耗時(shí),但是,使用Python編程和一些強(qiáng)大的庫(kù),可以使這個(gè)任務(wù)變得簡(jiǎn)單而高效,下面我們就來(lái)看看Python如何使用wxPython和PyMuPDF合并PDF文檔并自動(dòng)復(fù)制到剪貼板吧2023-11-11解決Django提交表單報(bào)錯(cuò):CSRF token missing or incorrect的問(wèn)題
這篇文章主要介紹了解決Django提交表單報(bào)錯(cuò):CSRF token missing or incorrect的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03