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程序设计有一定的借鉴价值。
相关文章
- python求逆矩阵的方法,Python 如何求矩阵的逆「建议收藏」
- Python-drf前戏38-前端Vue
- python中矩阵的转置怎么写_Python 矩阵转置的几种方法小结
- python判断linux中文件是否存在_Python判断文件是否存在的三种方法
- python监控网站更新_Python 通过网站search功能监控网站内容更新[通俗易懂]
- [Python] ImportError: DLL load failed … 找不到指定的模块 此类问题解决方法
- python字符串的使用方法_python输入字符串str
- Python 技巧篇-pip卸载python库实例演示,查看pip命令大全方法[通俗易懂]
- 【说站】Python threading模块的常用方法
- 【说站】python有哪些字符串查找类方法
- Python修改文件后缀_python重命名文件名
- python学习:文件操作及os方法大全
- 【7】python_matplotlib 输出(保存)矢量图方法;画图时图例说明(legend)放到图像外侧;Python_matplotlib图例放在外侧保存时显示不完整问题解决
- Python | "6大数据类型方法归纳总结(中)"
- python-异常处理和错误调试-异步IO程序的调试方法(三)
- Python查看模块(变量、函数、类)方法
- python判断远程端口是否打开详解编程语言
- python版本升级及pip部署方法详解编程语言
- python的json模块的dumps,loads,dump,load方法介绍详解编程语言
- Linux查看Python版本的有效方法(linux查看python版本)
- 使用Python连接SQL Server数据库(python连接sqlserver数据库)
- Python脚本实现Linux命令快捷控制(python执行linux命令)
- Linux系统下安装Python模块指南(linux安装python模块)
- 在Python安装MySQL支持模块的方法
- python解析模块(ConfigParser)使用方法
- c++生成dll使用python调用dll的方法
- python中使用sys模板和logging模块获取行号和函数名的方法
- Python中os和shutil模块实用方法集锦
- Python动态加载模块的3种方法
- Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
- Python实现全角半角转换的方法
- Python中让MySQL查询结果返回字典类型的方法