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中字典的基本知识初步介绍
May 21 Python
解决python3 urllib中urlopen报错的问题
Mar 25 Python
Python xlwt设置excel单元格字体及格式
Apr 18 Python
利用pyinstaller将py文件打包为exe的方法
May 14 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
PyTorch 对应点相乘、矩阵相乘实例
Dec 27 Python
django使用F方法更新一个对象多个对象字段的实现
Mar 28 Python
基于Python的Jenkins的二次开发操作
May 12 Python
Python操作Excel把数据分给sheet
May 20 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
快速了解Python开发环境Spyder
Jun 29 Python
python集合能干吗
Jul 19 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引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
PHP Header用于页面跳转时的几个注意事项
2016/10/21 PHP
php array_key_exists() 与 isset() 的区别
2016/10/24 PHP
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
2007/07/11 Javascript
取键盘键位ASCII码的网页
2007/07/30 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
jQuery搜索子元素的方法
2015/02/10 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
[01:08]DOTA2次级职业联赛 - Wings 战队宣传片
2014/12/01 DOTA
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[56:41]iG vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/17 DOTA
Python实现的多线程端口扫描工具分享
2015/01/21 Python
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
Python实现基本线性数据结构
2016/08/22 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
2018/05/31 Python
对python的输出和输出格式详解
2018/12/08 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
Python实现像awk一样分割字符串
2020/09/15 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
房地产出纳岗位职责
2013/12/01 职场文书
英语简历自我评价
2014/01/26 职场文书
公务员更新知识培训实施方案
2014/03/31 职场文书
中学生评语大全
2014/04/18 职场文书
大队委竞选演讲稿
2014/04/28 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
教育实习指导教师评语
2014/12/31 职场文书
《迟到》教学反思
2016/02/24 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
详解Python类和对象内容
2021/06/22 Python