Python中optparse模块使用浅析

最近遇到一个问题,是指定参数来运行某个特定的进程,这很类似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运行如下:

(0)

相关推荐

  • Python中urllib2模块的8个使用细节分享

    Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比如 urllib2 这个 HTTP 客户端库.这里总结了一些 urllib2 库的使用细节. 1 Proxy 的设置 urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy.如果想在程序中明确控制 Proxy,而不受环境变量的影响,可以使用下面的方式 复制代码 代码如下: import urllib2   enable_proxy = True proxy_hand

  • 使用Python脚本将绝对url替换为相对url的教程

    公司一个项目需要上传图片,一开始同事将图片上传后结合当前主机拼成了一个绝对的URL(http://192.168.1.1:888/m/getimg?filename=xxx.jpg由于同时给手机终端提供接口,在手机终端会引起一些bug,改完代码后要求将以前的uri替换成相对的URL(/m/getimg?filename=xxx.jpg),由于图片是用img标签嵌入到内容同时用a标签括起显示大图的,所以需要读取数据库并对内容进行替换, 脚本内容如下: #!/usr/bin/env python #

  • Python中调用PowerShell、远程执行bat文件实例

    python调用本地powershell方法 1.现在准备一个简陋的powershell脚本,功能是测试一个IP列表哪些可以ping通: 复制代码 代码如下: function test_ping($iplist) {     foreach ($myip in $iplist)     {         $strQuery = "select * from win32_pingstatus where address = '$myip'"         # 利用 Get-WmiO

  • Python中optparse模块使用浅析

    最近遇到一个问题,是指定参数来运行某个特定的进程,这很类似Linux中一些命令的参数了,比如ls -a,为什么加上-a选项会响应.optparse模块实现的也是类似的功能,它是为脚本传递命令参数. 使用此模块前,首先需要导入模块中的类OptionParser,然后创建它的一个实例(对象): 复制代码 代码如下: from optparse import OptionParser parser = OptionParser()  #这里也可以定义类的参数,后续有 接着就可以添加选项了,基本语法:

  • python中uuid模块实例浅析

    很多人不明白,学习这些冷门的函数基本上都用不到,或者说是什么多大用处,事实上,有是有很多用处的,比如今天给大家介绍的uuid模块,就能够生成一个真正的随机数,还可以给数据库生成唯一ID,很多地方都可以用到的,感兴趣的小伙伴,可以跟着小编,一起来认真的学习了解下啦. 模块安装: pip install uuid 模块导入: import uuid 使用场景: 1.能够生成时间戳 2.可以生成随机数 使用方法: import uuid uuid.uuid3(uuid.NAMESPACE_DNS, '

  • python中pickle模块浅析

    本章为大家介绍的模块,在python2的时候,并不受宠,主要的问题是存在安全漏洞,发现问题就要及时解决,因此在现在3版本中,已经得到了妥善的修复.pickle模块是序列化模块,主要应用的是在元组和列表中,当元组和列表很接近,元组相当于加了const定义的列表,但是Python中没有const关键字,带入这些观点,来了解以下内容. 模块安装: 无需手动安装,因为是python中的标准模块. 模块函数: pickle.load() 参数:文件名 作用:将文件内容反序列化输出. 模块使用: impor

  • Python中optionParser模块的使用方法实例教程

    本文以实例形式较为详尽的讲述了Python中optionParser模块的使用方法,对于深入学习Python有很好的借鉴价值.分享给大家供大家参考之用.具体分析如下: 一般来说,Python中有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的.符合Unix/Posix 规范的命令行说明. 示例如下: from optparse impo

  • python中xlutils库用法浅析

    不少小伙伴认为,直接去操作excel,比我们利用各种代码数据去处理,直接又简单,不那么花里胡哨,但是在代码上,处理数据,直接的软件操作是行不通的,需要我们去利用代码去处理,其实解决麻烦的办法非常简单,只需要我们调用专业的处理数据的模块,就可以轻松处理了,比如excel处理中的xlutils库,下面详细为大家介绍使用. 简单介绍: 最常见的使用在excel中的复制. 安装方式: pip install xlutils 注意点: 虽然可以进行excel的复制.但是只能提供写操作,不能够复制格式. 使

  • python中pygame模块用法实例

    本文实例讲述了python中pygame模块用法,分享给大家供大家参考.具体方法如下: import pygame, sys from pygame.locals import * #set up pygame pygame.init() windowSurface = pygame.display.set_mode((500, 400), 0, 32) pygame.display.set_caption("hello, world") BLACK = (0, 0, 0) WHITE

  • python中string模块各属性以及函数的用法介绍

    任何语言都离不开字符,那就会涉及对字符的操作,尤其是脚本语言更是频繁,不管是生产环境还是面试考验都要面对字符串的操作. python的字符串操作通过2部分的方法函数基本上就可以解决所有的字符串操作需求: • python的字符串属性函数 • python的string模块 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.字符串属性函数  系统版本:CentOS release 6.2 (Final)2.6.32-220.

  • Python中itertools模块用法详解

    本文实例讲述了Python中itertools模块用法,分享给大家供大家参考.具体分析如下: 一般来说,itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生成器和生成器表达式)的函数联合使用. chain(iter1, iter2, ..., iterN): 给出一组迭代器(iter1, iter2, ..., iterN),此函数创建一个新迭代器来将所有的迭代器链接起来,返回的迭代器从it

  • python中urllib模块用法实例详解

    本文实例讲述了python中urllib模块用法.分享给大家供大家参考.具体分析如下: 一.问题: 近期公司项目的需求是根据客户提供的api,我们定时去获取数据, 之前的方案是用php收集任务存入到redis队列,然后在linux下做一个常驻进程跑某一个php文件, 该php文件就一个无限循环,判断redis队列,有就执行,没有就break. 二.解决方法: 最近刚好学了一下python, python的urllib模块或许比php的curl更快,而且简单. 贴一下代码 复制代码 代码如下: #

  • python中hashlib模块用法示例

    我们以前介绍过一篇Python加密的文章:Python 加密的实例详解.今天我们看看python中hashlib模块用法示例,具体如下. hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法 具体应用 #!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj import h

随机推荐