python optparse模块使用实例
使用命令行时,如果要添加选项的话,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 <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")
??? 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: <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'
??得一?_始提到交?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 ??搞定一切,如同前面程式所示。
栏 目:Python代码
本文地址:http://www.codeinn.net/misctech/63193.html






