python小专题——optparse模块

小编 2026-06-25 阅读:1463 评论:0
浅谈optparse模块  最近遇到一个问题,是指定参数来运行某个特定的进程,这很类似Linux...

浅谈optparse模块

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

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

from optparse import OptionParserparser = 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有三种存储方式:storestore_falsestore_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 .num22

  如果不指定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.verboseTrue>>> fakeArgs = ['-q','bye bye']>>> options, args = parser.parse_args(fakeArgs)>>> options.verboseFalse#如果同时写两个选项v和q,它会以哪个为准呢,我试了一下,是以最后出现的为准,呵呵~~>>> fakeArgs = ['-q','bye bye','-v','hello']>>> options, args = parser.parse_args(fakeArgs)>>> options .verboseTrue

  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 OptionParserusage = "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.fileNameprint options.verboseprint optionsprint argsprint optParser.print_help()

 

  运行结果是:

file.txtFalse{'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 OptionParseroptParser = 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小专题——optparse模块

 

 

 

作者:zhoujie
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,不然我担心博客园找你算账
如果您觉得本文对你有帮助,请竖起您的大拇指右下角点推荐,也可以关注我
版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表