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机器学习理论与实战(四)逻辑回归
Jan 19 Python
Python处理文本换行符实例代码
Feb 03 Python
使用实现XlsxWriter创建Excel文件并编辑
May 04 Python
Python使用LDAP做用户认证的方法
Jun 20 Python
远程部署工具Fabric详解(支持Python3)
Jul 04 Python
在SQLite-Python中实现返回、查询中文字段的方法
Jul 17 Python
Python学习笔记之Zip和Enumerate用法实例分析
Aug 14 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
python socket通信编程实现文件上传代码实例
Dec 14 Python
pytorch GAN伪造手写体mnist数据集方式
Jan 10 Python
Python操作Sqlite正确实现方法解析
Feb 05 Python
一行Python命令实现批量加水印
Apr 07 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
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
php 常用字符串函数总结
2008/03/15 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
XAMPP安装与使用方法详细解析
2013/11/27 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
向当前style sheet中插入一个新的style实现方法
2013/04/01 Javascript
appendChild() 或 insertBefore()使用与区别介绍
2013/10/11 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
javascript内置对象arguments详解
2014/03/16 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
2015/03/13 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
bootstrap datepicker的基本使用教程
2019/07/09 Javascript
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
有关Python的22个编程技巧
2018/08/29 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
python读取ini配置文件过程示范
2019/12/23 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
方法名是否可以与构造器的名字相同
2012/06/04 面试题
财务管理个人自荐书范文
2013/11/24 职场文书
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
合作协议书怎么写
2014/04/18 职场文书
班组建设经验交流材料
2014/05/12 职场文书
办理信用卡工作证明
2014/09/30 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
Python 装饰器(decorator)常用的创建方式及解析
2022/04/24 Python
Python如何加载模型并查看网络
2022/07/15 Python