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笔记(1) 关于我们应不应该继续学习python
Oct 24 Python
numpy 进行数组拼接,分别在行和列上合并的实例
May 08 Python
python Selenium实现付费音乐批量下载的实现方法
Jan 24 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 Python
Python爬虫动态ip代理防止被封的方法
Jul 07 Python
python3 动态模块导入与全局变量使用实例
Dec 22 Python
Python字典添加,删除,查询等相关操作方法详解
Feb 07 Python
python 用struct模块解决黏包问题
Nov 07 Python
一文带你了解Python 四种常见基础爬虫方法介绍
Dec 04 Python
Python截图并保存的具体实例
Jan 14 Python
浅析Python实现DFA算法
Jun 26 Python
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
Oct 16 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.ini不生效问题解决方法(上传大于8M的文件)
2013/06/14 PHP
浅析PHP的ASCII码转换类
2013/07/05 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
js jquery验证银行卡号信息正则学习
2013/01/21 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
2017/02/18 Javascript
jQuery实现元素的插入
2017/02/27 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
一次围绕setTimeout的前端面试经验分享
2017/06/15 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
python和flask中返回JSON数据的方法
2018/03/26 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字等
2018/11/30 HTML / CSS
阿波罗盒子:Apollo Box
2017/08/14 全球购物
中科软笔试题和面试题
2014/10/07 面试题
连锁酒店店长职责范本
2014/02/13 职场文书
婚假请假条格式及范文
2014/04/10 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
班子四风对照检查材料思想汇报
2014/09/29 职场文书
2014-2015学年工作总结
2014/11/27 职场文书
干货:我将这样书写我的演讲稿!
2019/05/09 职场文书
导游词之桂林山水
2019/09/20 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书
Html5页面播放M4a音频文件
2021/03/30 HTML / CSS
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android
使用Springboot实现健身房管理系统
2021/07/01 Java/Android