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实现正则匹配检索远端FTP目录下的文件
Mar 25 Python
Python栈类实例分析
Jun 15 Python
详解Python中映射类型的内建函数和工厂函数
Aug 19 Python
python脚本替换指定行实现步骤
Jul 11 Python
python引入不同文件夹下的自定义模块方法
Oct 27 Python
解决pycharm运行时interpreter为空的问题
Oct 29 Python
python获取url的返回信息方法
Dec 17 Python
Python的条件表达式和lambda表达式实例
Jan 31 Python
Python和Anaconda和Pycharm安装教程图文详解
Feb 04 Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
Jun 06 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 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五种设计模式小结
2011/03/23 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
PHP在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
Javascript与PHP验证用户输入URL地址是否正确
2014/10/09 PHP
php实现倒计时效果
2015/12/19 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
2015/09/04 Javascript
js绘制购物车抛物线动画
2020/11/18 Javascript
理解javascript中的闭包
2017/01/11 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
2018/09/03 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
python实现简单的TCP代理服务器
2014/10/08 Python
python代码 FTP备份交换机配置脚本实例解析
2019/08/01 Python
Python适配器模式代码实现解析
2019/08/02 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
浅析pandas随机排列与随机抽样
2021/01/22 Python
关于礼仪的演讲稿
2014/01/04 职场文书
学期自我评价
2014/01/27 职场文书
总经理助理工作职责
2014/02/06 职场文书
优秀女职工事迹材料
2014/02/06 职场文书
迟到检讨书300字
2014/02/14 职场文书
正科级干部考察材料
2014/05/29 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
2015年惩防体系建设工作总结
2015/05/22 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫
python使用shell脚本创建kafka连接器
2022/04/29 Python