Python中optionParser模块的使用方法实例教程
本文以实例形式较为详尽的讲述了Python中optionParser模块的使用方法,对于深入学习Python有很好的借鉴价值。分享给大家供大家参考之用。具体分析如下:
一般来说,Python中有两个内建的模块用于处理命令行参数:
一个是getopt,《Deepinpython》一书中也有提到,只能简单处理命令行参数;
另一个是optparse,它功能强大,而且易于使用,可以方便地生成标准的、符合Unix/Posix规范的命令行说明。
示例如下:
fromoptparseimportOptionParser parser=OptionParser() parser.add_option("-p","--pdbk",action="store_true", dest="pdcl", default=False, help="writepdbkdatatooracledb") parser.add_option("-z","--zdbk",action="store_true", dest="zdcl", default=False, help="writezdbkdatatooracledb") (options,args)=parser.parse_args() ifoptions.pdcl==True: print'pdclistrue' ifoptions.zdcl==True: print'zdclistrue'
add_option用来加入选项,action是有store,store_true,store_false等,dest是存储的变量,default是缺省值,help是帮助提示
最后通过parse_args()函数的解析,获得选项,如options.pdcl的值。
下面是一个使用optparse的简单示例:
fromoptparseimportOptionParser [...] parser=OptionParser() parser.add_option("-f","--file",dest="filename", help="writereporttoFILE",metavar="FILE") parser.add_option("-q","--quiet", action="store_false",dest="verbose",default=True, help="don'tprintstatusmessagestostdout") (options,args)=parser.parse_args()
现在,你就可以在命令行下输入:
<yourscript>--file=outfile-q <yourscript>-foutfile--quiet <yourscript>--quiet--fileoutfile <yourscript>-q-foutfile <yourscript>-qfoutfile
上面这些命令是相同效果的。除此之外,optparse还为我们自动生成命令行的帮助信息:
<yourscript>-h <yourscript>--help
输出:
usage:<yourscript>[options] options: -h,--helpshowthishelpmessageandexit -fFILE,--file=FILEwritereporttoFILE -q,--quietdon'tprintstatusmessagestostdout
简单流程
首先,必须importOptionParser类,创建一个OptionParser对象:
fromoptparseimportOptionParser [...] parser=OptionParser()
然后,使用add_option来定义命令行参数:
parser.add_option(opt_str,..., attr=value,...)
每个命令行参数就是由参数名字符串和参数属性组成的。如-f或者–file分别是长短参数名:
parser.add_option("-f","--file",...)
最后,一旦你已经定义好了所有的命令行参数,调用parse_args()来解析程序的命令行:
(options,args)=parser.parse_args()
注:你也可以传递一个命令行参数列表到parse_args();否则,默认使用sys.argv[:1]。
parse_args()返回的两个值:
①options,它是一个对象(optpars.Values),保存有命令行参数值。只要知道命令行参数名,如file,就可以访问其对应的值:options.file。
②args,它是一个由positionalarguments组成的列表。
Actions
action是parse_args()方法的参数之一,它指示optparse当解析到一个命令行参数时该如何处理。actions有一组固定的值可供选择,默认是'store',表示将命令行参数值保存在options对象里。
示例代码如下:
parser.add_option("-f","--file", action="store",type="string",dest="filename") args=["-f","foo.txt"] (options,args)=parser.parse_args(args) printoptions.filename
最后将会打印出“foo.txt”。
当optparse解析到'-f',会继续解析后面的'foo.txt',然后将'foo.txt'保存到options.filename里。当调用parser.args()后,options.filename的值就为'foo.txt'。
你也可以指定add_option()方法中type参数为其它值,如int或者float等等:
parser.add_option("-n",type="int",dest="num")
默认地,type为'string'。也正如上面所示,长参数名也是可选的。其实,dest参数也是可选的。如果没有指定dest参数,将用命令行的参数名来对options对象的值进行存取。
store也有其它的两种形式:store_true和store_false,用于处理带命令行参数后面不带值的情况。如-v,-q等命令行参数:
parser.add_option("-v",action="store_true",dest="verbose") parser.add_option("-q",action="store_false",dest="verbose")
这样的话,当解析到'-v',options.verbose将被赋予True值,反之,解析到'-q',会被赋予False值。
其它的actions值还有:
store_const、append、count、callback。
默认值
parse_args()方法提供了一个default参数用于设置默认值。如:
parser.add_option("-f","--file",action="store",dest="filename",default="foo.txt") parser.add_option("-v",action="store_true",dest="verbose",default=True)
又或者使用set_defaults():
parser.set_defaults(filename="foo.txt",verbose=True) parser.add_option(...) (options,args)=parser.parse_args()
生成程序帮助
optparse另一个方便的功能是自动生成程序的帮助信息。你只需要为add_option()方法的help参数指定帮助信息文本:
usage="usage:%prog[options]arg1arg2" parser=OptionParser(usage=usage) parser.add_option("-v","--verbose", action="store_true",dest="verbose",default=True, help="makelotsofnoise[default]") parser.add_option("-q","--quiet", action="store_false",dest="verbose", help="bevewwyquiet(I'mhuntingwabbits)") parser.add_option("-f","--filename", metavar="FILE",help="writeoutputtoFILE"), parser.add_option("-m","--mode", default="intermediate", help="interactionmode:novice,intermediate," "orexpert[default:%default]")
当optparse解析到-h或者–help命令行参数时,会调用parser.print_help()打印程序的帮助信息:
usage:<yourscript>[options]arg1arg2 options: -h,--helpshowthishelpmessageandexit -v,--verbosemakelotsofnoise[default] -q,--quietbevewwyquiet(I'mhuntingwabbits) -fFILE,--filename=FILE writeoutputtoFILE -mMODE,--mode=MODEinteractionmode:novice,intermediate,or expert[default:intermediate]
注意:打印出帮助信息后,optparse将会退出,不再解析其它的命令行参数。
以上面的例子来一步步解释如何生成帮助信息:
①自定义的程序使用方法信息(usagemessage):
usage="usage:%prog[options]arg1arg2"
这行信息会优先打印在程序的选项信息前。当中的%prog,optparse会以当前程序名的字符串来替代:如os.path.basename.(sys.argv[0])。
如果用户没有提供自定义的使用方法信息,optparse会默认使用:“usage:%prog[options]”。
②用户在定义命令行参数的帮助信息时,不用担心换行带来的问题,optparse会处理好这一切。
③设置add_option方法中的metavar参数,有助于提醒用户,该命令行参数所期待的参数,如metavar=“mode”:
-mMODE,--mode=MODE
注意:metavar参数中的字符串会自动变为大写。
④在help参数的帮助信息里使用%default可以插入该命令行参数的默认值。
如果程序有很多的命令行参数,你可能想为他们进行分组,这时可以使用OptonGroup:
group=OptionGroup(parser,``DangerousOptions'', ``Caution:usetheseoptionsatyourownrisk.`` ``Itisbelievedthatsomeofthembite.'') group.add_option(``-g'',action=''store_true'',help=''Groupoption.'') parser.add_option_group(group)
下面是将会打印出来的帮助信息:
usage:[options]arg1arg2 options: -h,--helpshowthishelpmessageandexit -v,--verbosemakelotsofnoise[default] -q,--quietbevewwyquiet(I'mhuntingwabbits) -fFILE,--file=FILEwriteoutputtoFILE -mMODE,--mode=MODEinteractionmode:oneof'novice','intermediate' [default],'expert' DangerousOptions: Caution:useoftheseoptionsisatyourownrisk.Itisbelievedthat someofthembite. -gGroupoption.
显示程序版本
象usagemessage一样,你可以在创建OptionParser对象时,指定其version参数,用于显示当前程序的版本信息:
parser=OptionParser(usage="%prog[-f][-q]",version="%prog1.0")
这样,optparse就会自动解释–version命令行参数:
$/usr/bin/foo--version foo1.0
处理异常
包括程序异常和用户异常。这里主要讨论的是用户异常,是指因用户输入无效的、不完整的命令行参数而引发的异常。optparse可以自动探测并处理一些用户异常:
$/usr/bin/foo-n4x usage:foo[options] foo:error:option-n:invalidintegervalue:'4x' $/usr/bin/foo-n usage:foo[options] foo:error:-noptionrequiresanargument
用户也可以使用parser.error()方法来自定义部分异常的处理:
(options,args)=parser.parse_args() [...] ifoptions.aandoptions.b: parser.error("options-aand-baremutuallyexclusive")
上面的例子,当-b和-b命令行参数同时存在时,会打印出“options-aand-baremutuallyexclusive“,以警告用户。
如果以上的异常处理方法还不能满足要求,你可能需要继承OptionParser类,并重载exit()和erro()方法。
完整的程序例子如下:
fromoptparseimportOptionParser [...] defmain(): usage="usage:%prog[options]arg" parser=OptionParser(usage) parser.add_option("-f","--file",dest="filename", help="readdatafromFILENAME") parser.add_option("-v","--verbose", action="store_true",dest="verbose") parser.add_option("-q","--quiet", action="store_false",dest="verbose") [...] (options,args)=parser.parse_args() iflen(args)!=1: parser.error("incorrectnumberofarguments") ifoptions.verbose: print"reading%s..."%options.filename [...] if__name__=="__main__": main()
相信本文所述对大家的Python程序设计有一定的借鉴价值。