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 07 Python
Python中用max()方法求最大值的介绍
May 15 Python
Python2实现的LED大数字显示效果示例
Sep 04 Python
python筛选出两个文件中重复行的方法
May 31 Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 Python
python找出一个列表中相同元素的多个索引实例
Jun 11 Python
pandas数据筛选和csv操作的实现方法
Jul 02 Python
pytorch中图像的数据格式实例
Feb 11 Python
python字典通过值反查键的实现(简洁写法)
Sep 30 Python
python 动态渲染 mysql 配置文件的示例
Nov 20 Python
python 实现波浪滤镜特效
Dec 02 Python
用Python可视化新冠疫情数据
Jan 18 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 mysql数据库操作类
2008/06/04 PHP
使用PHP实现密保卡功能实现代码&amp;lt;打包下载直接运行&amp;gt;
2011/10/09 PHP
PHP分页详细讲解(有实例)
2013/10/30 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
js获取url参数的使用扩展实例
2007/12/29 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
javascript的几种写法总结
2016/09/30 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&amp;”)
2016/12/23 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
Vue.js组件实现选项卡以及切换特效
2019/07/24 Javascript
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
[05:45]Ti4观战指南(下)
2014/07/07 DOTA
Python探索之修改Python搜索路径
2017/10/25 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
使用Django清空数据库并重新生成
2020/04/03 Python
Web页面中八种创建多列等高(等高列布局)的实现技术
2012/12/24 HTML / CSS
HTML5添加禁止缩放功能
2017/11/03 HTML / CSS
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
Java模拟试题
2014/11/10 面试题
客户代表实习人员自我鉴定
2013/09/27 职场文书
物业管理专业求职信
2014/06/11 职场文书
学生通报表扬范文
2015/05/04 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
解决Python中的modf()函数取小数部分不准确问题
2021/05/28 Python
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript