最近遇到一个问题,是指定参数来运行某个特定的进程,这很类似Linux中一些命令的参数了,比如ls -a,为什么加上-a选项会响应。optparse模块实现的也是类似的功能,它是为脚本传递命令参数。
使用此模块前,首先需要导入模块中的类OptionParser,然后创建它的一个实例(html" target="_blank">对象):
from optparse import OptionParser parser = OptionParser() #这里也可以定义类的参数,后续有
接着就可以添加选项了,基本语法:
parser.add_option(opt_str, ..., attr=value, ...)
parser.add_option("-f", "--file", ...) #-f 和 --file 是作为调用时的参数的标签,会被识别
(options, args) = parser.parse_args() #parse_args可以有参数,不定义的话使用默认的sys.argv[1:]
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")
>>> 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'
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.verboseelse: for i in range(1,5): #不给选项n的情况下,默认输出的是1~4 #num = i print i
打开cmd运行如下:
本文向大家介绍浅析Python requests 模块,包括了浅析Python requests 模块的使用技巧和注意事项,需要的朋友参考一下 Python requests 模块 requests 模块是我们使用的 python爬虫 模块 可以完成市场进80%的爬虫需求。 安装 使用 requests模块代码编写的流程: - 指定url - 发起请求 - 获取响应对象中的数据 - 持久化存储
本文向大家介绍浅析python内置模块collections,包括了浅析python内置模块collections的使用技巧和注意事项,需要的朋友参考一下 collections是Python内建的一个集合模块,提供了许多有用的集合类。 1、namedtuple python提供了很多非常好用的基本类型,比如不可变类型tuple,我们可以轻松地用它来表示一个二元向量。 >>> v = (2,3)
本文向大家介绍深入浅析Python 命令行模块 Click,包括了深入浅析Python 命令行模块 Click的使用技巧和注意事项,需要的朋友参考一下 Click 是用 Python 写的一个第三方模块,用于快速创建命令行。我们知道,Python 内置了一个 Argparse 的标准库用于创建命令行,但使用起来有些繁琐,Click 相比于 Argparse,就好比 requests 相比于 url
本文向大家介绍python xlsxwriter模块的使用,包括了python xlsxwriter模块的使用的使用技巧和注意事项,需要的朋友参考一下 1.workbook类 add_worksheet 用于添加一个新的工作表,sheetname为工作表名称,默认是sheet1,例如: add_format 用于在工作表中创建一个新的格式对象来格式化单元格 add_chart 用于
本文向大家介绍浅谈python中的正则表达式(re模块),包括了浅谈python中的正则表达式(re模块)的使用技巧和注意事项,需要的朋友参考一下 一、简介 正则表达式本身是一种小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配。正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行。 二、正则表达式中常用的字符含义 1、普通字符
本文向大家介绍浅谈python jieba分词模块的基本用法,包括了浅谈python jieba分词模块的基本用法的使用技巧和注意事项,需要的朋友参考一下 jieba(结巴)是一个强大的分词库,完美支持中文分词,本文对其基本用法做一个简要总结。 特点 支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析; 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义