python optparse模块使用实例


Posted in Python onApril 09, 2015

使用命令行时,如果要添加选项的话,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.?生一?? optparse.OptionParser 的物件。可以在?生?r??程式的命令列?明" (usage) 做????交? 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 有?多??,??是 "store",所以即使省略也?o妨,其它的 action ??在下面??^??明。

若有一??以上的 option,重覆上述的方式加入(注意:以下省略了 action ???:

optParser.add_option("-s",

                         "--someopt",

                         type = "string",

                         dest = "someopt")

》3.呼叫 OptionParser.parse_args() ?行解?。如果?]有?魅??? OptionParser ???? sys.argv[1:] ??ο筮M行解?。OptionParser.parse_args() ??骰匾?? tuple,由 optparse.Values 和 一?? list 所?成。下例?魅胍??假造的??盗?
fakeArgs = ['-f', 'thefile.txt', '-s', 'xyz', 'arg1', 'arg2', 'arge']

    

    options, args = optParser.parse_args(fakeArgs)

    

    print options.fileName

    print options.someopt

    print args

最後??玫降妮?出?果:
thefile.txt

    xyz

    ['arg1', 'arg2', 'arge']

?是一????蔚墓?例,?明了 OptionParser 的一般使用方式。透????例子,可以看到如果?槌淌郊尤 option, ?K且在程式中取得 option argument 和 positional argument。OptionParser.parse_args() ?有?多用法,下面??f明一部份。

?槌淌郊尤 flag option:

?多的 Unix 命令?碛 "-v", "-q" 的 option,代表"提供???息"或是"不?示?息"。要做到?一?,只要在程式中加入下列的 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不相悖,程式可以??成:?收到 "-v" ?r,?示???息;?收到 "-q" ?r,?示概略?息,或完全不?示;??烧叨?]有收到,?t?示一般的?息。

?定 option 的??值:

上述的例子都假?命令例??盏筋A期中的 option,那?如果?]有 option ?r,接收到的 option 值??鞘颤N呢?答案是 None!如果想? option 提供??值,只要在 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()

上述的程式??槌淌郊尤肓??? option,? "-v" ?]有出??r, opts.verbose ??值? True;? "-q" 被指定?r, opts.verbose 被?定? False,和上一??例子有?不同。再看下一??例子:
parser.add_option("-v", action="store_true", dest="verbose", default=False)

parser.add_option("-q", action="store_false", dest="verbose", default=True)

opts.verbose 的??值??鞘颤N?答案是 True,最後一??指定到同一??目?说 option ??值???裼谩?/p>

一般的 option 亦可加入??值:

parser.add_option("-f", action="store", dest="fileName", default = "defaultConfig.txt")

?槌淌郊尤胝f明:

??实 Unix 命令大多有著 "-h", "--help" 的 option,??⑹褂谜f明印出?怼T OptionParser.parse_args() 中指定 "help" ????K指定?明的字串,就可以?檫@?? option 加入?明了:

parser.add_option("-v",

                      action="store_true",

                      dest="verbose",

                      default=False,

                      help="make lots of noise [default]")

?程式收到 "-h" 或 "--help",交? OptionParser 解??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'

??得一?始提到交? OptionParser 建??子的?? MSG_USAGE ??#63; optparse 套件? usage ?息也提供了一些支援。在 usage 中使用 "%prog" ??字, OptionParser ????⑵浯?Q?槌淌矫?即 sys.args[0]:
usage = "usage: %prog [options] arg1 arg2"

如果程式名? "myprog",?t出?在 help ?息中的 usage 就???
usage = "usage: myprog [options] arg1 arg2"

如果OptionParser 建??子?]有收到任何????t???赢a生一?? usage ?息:
"usage: %prog [options]"

前提是程式?]有 positional argument。甭?? option 在 help ?息中排列的方式, OptionParser ??愣ㄒ磺?如同前面程式所示。
Python 相关文章推荐
python通过scapy获取局域网所有主机mac地址示例
May 04 Python
python3实现SMTP发送邮件详细教程
Jun 19 Python
Python正则表达式和re库知识点总结
Feb 11 Python
django-rest-framework解析请求参数过程详解
Jul 18 Python
Python timeit模块的使用实践
Jan 13 Python
Python字典深浅拷贝与循环方式方法详解
Feb 09 Python
浅析python 定时拆分备份 nginx 日志的方法
Apr 27 Python
Python操作Word批量生成合同的实现示例
Aug 28 Python
PyTorch预训练Bert模型的示例
Nov 17 Python
python利用proxybroker构建爬虫免费IP代理池的实现
Feb 21 Python
PyQt QMainWindow的使用示例
Mar 24 Python
python全面解析接口返回数据
Feb 12 Python
Python中处理时间的几种方法小结
Apr 09 #Python
Python CSV模块使用实例
Apr 09 #Python
Python常用随机数与随机字符串方法实例
Apr 09 #Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
Apr 09 #Python
举例讲解Python程序与系统shell交互的方式
Apr 09 #Python
使用Python中的cookielib模拟登录网站
Apr 09 #Python
列举Python中吸引人的一些特性
Apr 09 #Python
You might like
php表单转换textarea换行符的方法
2010/09/10 PHP
HTML代码中标签的全部属性 中文注释说明
2009/03/26 Javascript
javascript 读取图片文件的大小
2009/06/25 Javascript
js实现简单的星级选择器提交效果适用于评论等
2013/10/18 Javascript
jquery对元素拖动排序示例
2014/01/16 Javascript
在百度知道团队中快速审批新成员的js脚本
2014/02/02 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
2014/06/30 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
jQuery+HTML5实现手机摇一摇换衣特效
2015/06/05 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
解决js ajax同步请求造成浏览器假死的问题
2018/01/18 Javascript
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
vue中用 async/await 来处理异步操作
2020/07/18 Javascript
如何使用three.js 制作一个三维的推箱子游戏
2020/07/29 Javascript
[51:29]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
Python 获取当前所在目录的方法详解
2017/08/02 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
python实现聊天小程序
2018/03/13 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
Reformation官网:美国女装品牌
2018/09/14 全球购物
应届毕业生求职信范例分享
2013/12/17 职场文书
关爱老人标语
2014/06/21 职场文书
小学庆六一主持词
2015/06/30 职场文书
文明礼仪主题班会
2015/08/13 职场文书
几款流行的HTML5 UI框架比较(小结)
2021/04/08 HTML / CSS
python 爬取豆瓣网页的示例
2021/04/13 Python
Spring Boot 排除某个类加载注入IOC的操作
2021/08/02 Java/Android
JS 基本概念详细介绍
2021/10/16 Javascript