zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Python中optionParser模块的使用方法实例教程

Python方法模块 使用 实例教程
2023-06-13 09:15:44 时间

本文以实例形式较为详尽的讲述了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程序设计有一定的借鉴价值。