Python中optparse模块使用浅析


Posted in Python onJanuary 01, 2015

最近遇到一个问题,是指定参数来运行某个特定的进程,这很类似Linux中一些命令的参数了,比如ls -a,为什么加上-a选项会响应。optparse模块实现的也是类似的功能,它是为脚本传递命令参数。

使用此模块前,首先需要导入模块中的类OptionParser,然后创建它的一个实例(对象):

from optparse import OptionParser

parser = OptionParser()  #这里也可以定义类的参数,后续有

接着就可以添加选项了,基本语法:

parser.add_option(opt_str, ...,   

                  attr=value, ...)

  每个opt_str可以有多个选项字符串,比如-f 和--file(就行Linux命令行中ls -a和ls --all效果一样),只要定义了这些选项,则在命令行输入的时候这些选项就会被识别,否则报错。opt_str的定义可以如下:

parser.add_option("-f", "--file", ...)  #-f 和 --file 是作为调用时的参数的标签,会被识别

当选项被定义好后,则可以调用parse_args()函数来获取我们定义的选项和参数
(options, args) = parser.parse_args() #parse_args可以有参数,不定义的话使用默认的sys.argv[1:]

parse_args()返回两个值,一个是选项options(如:-f),另一个是参数args,即除选项options以外的值(如:test.txt)

add_option中最重要的四个option的属性是:action,type,dest(destination),help。这四个中action又是最基础的。

action参数(附带介绍了type、dest):

action参数告诉optparse该做什么当它在命令行中遇到选项时。action有三种存储方式:store、store_false、store_true。如果不指定action的值,默认的是store,它告诉optparse将继续读取下一个参数(type),保证类型的正确性,并将它将值存储在一个变量(dest)中,即将命令行中输入的字符串将它存为options的属性,这样可以直接调用。??铝艘淮蠖眩?易约憾急桓阍瘟?~~~,先看个例子吧!

>>> parser.add_option("-f", "--file",action="store", type="string", dest="filename")

<Option at 0x2d72f48: -f/--file>

>>> args = ["-f", "foo.txt"] #这个是模拟命令行的输入

>>> (options, args) = parser.parse_args(args)

>>> options.filename

'foo.txt'

上述:当optparse看到选项-f时,它将继续读下一个参数是foo.txt,并将它存储在options.filename(这个filename就是add_option中的dest),之后dest的值将作为parser的属性被存储。所以,当调用parse_args函数时,options.filename的值就是foo.txt。这个是以“string”类型存储的,当然type也可以是int和float等,比如下面的:

parser.add_option("-n", type="int", dest="num")

注意,这个没有指定一个长字符串的选项(如:--number),这当然是可以的,不过命令行输入时选项就只能是-n了,也没有指定action,使用默认的“store”。再次使用模拟的命令行参数["-n22"](一个参数),也可以写成["-n  22"](作为两个参数来传递):
>>> parser.add_option("-n", type="int", dest="num")

<Option at 0x2d71308: -n>

>>> (options, args) = parser.parse_args(["-n22"])

>>> print options .num

22

如果不指定type参数,默认的是string类型,所以一个最简单的方式可以写成这样:

parser.add_option("-f", dest="filename")

action另两种值分别是:“store_true”和“store_false”,这一般作为一个标记使用,例如开始运行一个程序时将flag设为True,退出时将flag设为False。看了下面的例子就全明白了:当选项遇到v时,它将options.verbose设为True,当选项遇到q时,它将options.verbose设为False:

>>> from optparse import OptionParser

>>> parser=OptionParser()

>>> parser.add_option("-v", action="store_true", dest="verbose")

<Option at 0x2ceb888: -v>

>>> parser.add_option("-q", action="store_false", dest="verbose")

<Option at 0x2d68e48: -q>

>>> fakeArgs = ['-v','hello']

>>> options, args = parser.parse_args(fakeArgs)

>>> options.verbose

True

>>> fakeArgs = ['-q','bye bye']

>>> options, args = parser.parse_args(fakeArgs)

>>> options.verbose

False

#如果同时写两个选项v和q,它会以哪个为准呢,我试了一下,是以最后出现的为准,呵呵~~

>>> fakeArgs = ['-q','bye bye','-v','hello']

>>> options, args = parser.parse_args(fakeArgs)

>>> options .verbose

True

Default参数:

default参数很好理解了,即当没有指定dest的值时,给出个默认值,如下:

>>> parser.add_option("-x", action="store", dest="verbose", default="hahaha")

<Option at 0x2d77148: -x>

>>> options, args = parser.parse_args() #这里没有传参数

>>> options.verbose

'hahaha'

如果这样的话,那下面这两句的效果就一样了(前提是不给parse_args()函数传参:) 
parser.add_option("-v", action="store_true", dest="verbose")

parser.add_option("-q", action="store_false", dest="verbose", default=True)

help参数:

这个参数是为了让我们定义的“命令”更为逼真,还提供了帮助消息了呢!呵呵~~简单用法如下:

>>> from optparse import OptionParser

>>> usage = "myprog[ -f <filename>][-s <xyz>] arg1[,arg2..]"

>>> parser=OptionParser(usage) #这里为类添加了参数usage

>>> optParser.add_option("-f","--file",action = "store",type="string",dest = "fileName",help="no any help")

<Option at 0x2bdb888: -f/--file>

>>> fakeArgs = ['-f','file.txt']

>>> options, args = parser.parse_args(fakeArgs)

>>> options.fileName

'file.txt'

>>> parser.print_help()

Usage: myprog[ -f <filename>][-s <xyz>] arg1[,arg2..]
Options:

  -h, --help            show this help message and exit  #此两行根据option自动生成,比较智能额~~

  -f FILENAME, --file=FILENAME

                        no any help  #这是我定义的帮助信息(呵呵,不太友好~~)

>>> parser.print_usage()

Usage: myprog[ -f <filename>][-s <xyz>] arg1[,arg2..]  #这是类的usage信息~~很逼真,有木有?
>>>

上述是介绍基本的语法,下面举两个例子,一个是网上找的一个模拟命令行的参数的例子,另一个是“真实”的例子~~~

Example1:

from optparse import OptionParser

usage = "myprog[ -f <filename>][-s <xyz>] arg1[,arg2..]"

optParser = OptionParser(usage)

optParser.add_option("-f","--file",action = "store",type="string",dest = "fileName")

ooptParser.add_option("-v","--vison", action="store_false", dest="verbose",default='None',

                     help="make lots of noise [default]")

fakeArgs = ['-f','file.txt','-v','good luck to you', 'arg2', 'arge']  

options, args = optParser.parse_args(fakeArgs)

print options.fileName

print options.verbose

print options

print args

print optParser.print_help()

运行结果是:

file.txt

False

{'verbose': False, 'fileName': 'file.txt'}

['this is some what', 'arg2', 'arge']

Usage: myprog[ -f <filename>][-s <xyz>] arg1[,arg2..]

Options:

  -h, --help            show this help message and exit

  -f FILENAME, --file=FILENAME

  -v, --vison           make lots of noise [default]

Example2:

一个简单的例子,就是将给脚本传选项n时,则输出的是n的参数的值,否则给出默认值(脚本保存在E盘):

from optparse import OptionParser

optParser = OptionParser()

optParser.add_option("-n","--number",action = "store",type="int",dest = "intNumber")

optParser.add_option("-v","--version", action="store_false", dest="verbose",default='gggggggg',help="no help")

options, args = optParser.parse_args()

if options.intNumber is not None:  #当有选项n时,则使用给出的参数值

    #num = options.intNumber

    print options.intNumber,options.verbose
else:

    for i in range(1,5):  #不给选项n的情况下,默认输出的是1~4

        #num = i

        print i

打开cmd运行如下:

Python中optparse模块使用浅析

Python 相关文章推荐
浅谈Python中copy()方法的使用
May 21 Python
Python基于二分查找实现求整数平方根的方法
May 12 Python
python读写json文件的简单实现
Apr 11 Python
python实现在pandas.DataFrame添加一行
Apr 04 Python
在Python中实现替换字符串中的子串的示例
Oct 31 Python
NumPy 基本切片和索引的具体使用方法
Apr 24 Python
Python3 合并二叉树的实现
Sep 30 Python
Python中Subprocess的不同函数解析
Dec 10 Python
解决pycharm安装第三方库失败的问题
May 09 Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
Sep 09 Python
浅谈Python xlwings 读取Excel文件的正确姿势
Feb 26 Python
Python中urllib2模块的8个使用细节分享
Jan 01 #Python
Python读取ini文件、操作mysql、发送邮件实例
Jan 01 #Python
Python实现检测服务器是否可以ping通的2种方法
Jan 01 #Python
Python Web框架Flask信号机制(signals)介绍
Jan 01 #Python
Python模拟登录12306的方法
Dec 30 #Python
python执行shell获取硬件参数写入mysql的方法
Dec 29 #Python
简单的抓取淘宝图片的Python爬虫
Dec 25 #Python
You might like
php文件夹与文件目录操作函数介绍
2013/09/09 PHP
PHP图片处理之图片旋转和图片翻转实例
2014/11/19 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
PHP中抽象类、接口的区别与选择分析
2016/03/29 PHP
PHP书写格式详解(必看)
2016/05/23 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
python实现逐个读取txt字符并修改
2018/12/24 Python
kafka-python批量发送数据的实例
2018/12/27 Python
Pytorch释放显存占用方式
2020/01/13 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
Python figure参数及subplot子图绘制代码
2020/04/18 Python
Python 实现自动登录+点击+滑动验证功能
2020/06/10 Python
PyInstaller运行原理及常用操作详解
2020/06/13 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
匡威德国官网:Converse德国
2019/01/26 全球购物
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
文明餐桌行动实施方案
2014/02/19 职场文书
材料工程专业毕业生求职信
2014/03/04 职场文书
诚信考试承诺书
2014/03/27 职场文书
2014年后备干部工作总结
2014/12/08 职场文书
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS