使用命令行時(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. ?a生一?? optparse.OptionParser 的物件。可以在?a生?r??"程式的命令列?f明" (usage) 做????,交?o OptionParser 的建??子:
from optparse import OptionParser
??? MSG_USAGE = "myprog[ -f
??? optParser = OptionParser(MSG_USAGE)
》2. 呼叫 OptionParser.add_option() 加入接受的 option:
optParser.add_option("-f",
???????????????????????? "--file",
???????????????????????? action = "store",
???????????????????????? type = "string",
???????????????????????? dest = "fileName")
??? action 有?S多?N?,?A?O是 "store",所以即使省略也?o妨,其它的 action ?N?在下面???^?m?f明。
若有一??以上的 option,重覆上述的方式加入(注意:以下省略了 action ???):
optParser.add_option("-s",
???????????????????????? "--someopt",
???????????????????????? type = "string",
???????????????????????? dest = "someopt")
》3. 呼叫 OptionParser.parse_args() ?M行解?x。如果?]有?魅???, OptionParser ?A?O??以 sys.argv[1:] ??ο筮M(jìn)行解?x。OptionParser.parse_args() ???骰匾?? tuple,由 optparse.Values 和 一?? list 所?M成。下例?魅胍??假造的??盜?:
fakeArgs = ['-f', 'thefile.txt', '-s', 'xyz', 'arg1', 'arg2', 'arge']
???
??? options, args = optParser.parse_args(fakeArgs)
???
??? print options.fileName
??? print options.someopt
??? print args
最後??得到的?出?Y果:
thefile.txt
??? xyz
??? ['arg1', 'arg2', 'arge']
?@是一????蔚墓?例,?f明了 OptionParser 的一般使用方式。透?^?@??例子,可以看到如果?槌淌郊尤? option, ?K且在程式中取得 option argument 和 positional argument。OptionParser.parse_args() ?有?S多用法,下面???f明一部份。
?槌淌郊尤? flag option:
?S多的 Unix 命令?磧? "-v", "-q" 的 option,代表"提供???息"或是"不?@示?息"。要做到?@一?c,只要在程式中加入下列的 option :
parser.add_option("-v", action="store_true", dest="verbose")
??? parser.add_option("-q", action="store_false", dest="verbose")
??? opts, args = parser.parse_args()
第一?? add_option() 加入了一?? "-v" 的 option;如果命令列??抵諧霈F(xiàn)了 "-v",?t opts.verbose ???是 True;相反的,第二?? add_option() 加入了一?? "-q" option;如果命令列??抵諧霈F(xiàn)了 "-q",?t opts.verbose ???是 False,?@?燒?K不相悖,程式可以?O?成:??收到 "-v" ?r,?@示???息;??收到 "-q" ?r,?@示概略?息,或完全不?@示;???燒叨?]有收到,?t?@示一般的?息。
?O定 option 的?A?O值:
上述的例子都假?O命令例??收到?A期中的 option,那?N如果?]有 option ?r,接收到的 option 值??是什?N呢?答案是 None!如果想?? option 提供?A?O值,只要在 OptionParser.parse_args()中指定??? 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()
上述的程式?a?槌淌郊尤肓??? option,?? "-v" ?]有出?F?r, opts.verbose ?A?O值?? True;?? "-q" 被指定?r, opts.verbose 被?O定?? False,和上一??例子有?c不同。再看下一??例子:
parser.add_option("-v", action="store_true", dest="verbose", default=False)
parser.add_option("-q", action="store_false", dest="verbose", default=True)
opts.verbose 的?A?O值??是什?N?答案是 True,最後一??指定到同一??目?說(shuō)? option ?A?O值??被?裼謾?
一般的 option 亦可加入?A?O值:
parser.add_option("-f", action="store", dest="fileName", default = "defaultConfig.txt")
?槌淌郊尤胝f(shuō)明:
??實(shí)? Unix 命令大多有著 "-h", "--help" 的 option,???⑹褂謎f明印出?懟T? OptionParser.parse_args() 中指定 "help" ???,?K指定?f明的字串,就可以?檫@?? option 加入?f明了:
parser.add_option("-v",
????????????????????? action="store_true",
????????????????????? dest="verbose",
????????????????????? default=False,
????????????????????? help="make lots of noise [default]")
??程式收到 "-h" 或 "--help",交?o OptionParser 解?x?r,??自?佑〕穌f明?熱?,而忽略其它的 argument:
usage:
?
??? 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'
??得一?_始提到交?o OptionParser 建??子的??? MSG_USAGE ??? optparse 套件?? usage ?息也提供了一些支援。在 usage 中使用 "%prog" ?P?I字, OptionParser ??自??⑵浯??Q?槌淌矯?,即 sys.args[0]:
usage = "usage: %prog [options] arg1 arg2"
如果程式名?? "myprog",?t出?F在 help ?息中的 usage 就??是:
usage = "usage: myprog [options] arg1 arg2"
如果OptionParser 建??子?]有收到任何???,?t??自?贏a生一?? usage ?息:
"usage: %prog [options]"
前提是程式?]有 positional argument。甭??心 option 在 help ?息中排列的方式, OptionParser ??搞定一切,如同前面程式所示。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
