使用命令行時,如果要添加選項的話,python 2.3里新增加了一個模塊叫optparse,也是專門來處理命令行選項的。
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用來加入選項,action是有store,store_true,store_false等,dest是存儲的變量,default是缺省值,help是幫助提示
最后通過parse_args()函數的解析,獲得選項,如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行解?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了 "-v",?t opts.verbose ???是 True;相反的,第二?? add_option() 加入了一?? "-q" option;如果命令列??抵諧霈F了 "-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,最後一??指定到同一??目?說? option ?A?O值??被?裼謾?
一般的 option 亦可加入?A?O值:
parser.add_option("-f", action="store", dest="fileName", default = "defaultConfig.txt")
?槌淌郊尤胝f明:
??實? 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 ??搞定一切,如同前面程式所示。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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