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 BeautifulSoup库抓取58手机维修信息
Nov 21 Python
在Python上基于Markov链生成伪随机文本的教程
Apr 17 Python
Python可变参数函数用法实例
Jul 07 Python
Python随机数用法实例详解【基于random模块】
Apr 18 Python
Python自定义线程池实现方法分析
Feb 07 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
Python面向对象封装操作案例详解 II
Jan 02 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
python程序输出无内容的解决方式
Apr 09 Python
Python通过两个dataframe用for循环求笛卡尔积
Apr 29 Python
如何将numpy二维数组中的np.nan值替换为指定的值
May 14 Python
Python find()、rfind()方法及作用
Dec 24 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
奉献出一个封装的curl函数 便于调用(抓数据专用)
2013/07/22 PHP
用js实现的模拟jquery的animate自定义动画(2.5K)
2010/07/20 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
js读取cookie方法总结
2014/10/31 Javascript
jquery实现搜索框常见效果的方法
2015/01/22 Javascript
jQuery焦点图切换特效代码分享
2015/09/15 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
js实现查询商品案例
2020/07/22 Javascript
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
python pyinstaller 加载ui路径方法
2019/06/10 Python
django-filter和普通查询的例子
2019/08/12 Python
Python实现多线程/多进程的TCP服务器
2019/09/03 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
python正则表达式匹配IP代码实例
2019/12/28 Python
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
工业设计专业个人求职信范文
2013/12/28 职场文书
机电专业个人求职信范文
2013/12/30 职场文书
廉政教育心得体会
2014/01/01 职场文书
店面销售职位的职责
2014/03/09 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
保护母亲河倡议书
2014/04/14 职场文书
计算机系本科生求职信
2014/05/31 职场文书
安全演讲稿开场白
2014/08/25 职场文书
感谢信的格式
2015/01/21 职场文书
护士年终个人总结
2015/02/13 职场文书
经营目标责任书
2015/05/08 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书
创业计划书之水果店
2019/07/18 职场文书
2019垃圾分类宣传口号汇总
2019/08/16 职场文书
基于Java的MathML转图片的方法(示例代码)
2021/06/23 Java/Android
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android