一直以来对optparser不是特别的理解,今天就狠下心,静下心研究了一下这个库。当然了,不敢说理解的很到位,但是足以应付正常的使用了。废话不多说,开始今天的分享吧。


简介

optparse模块主要用来为脚本传递命令参数功能.

引入

在IDE中引入optparser是很方便的。

from optparser import OptionParser

初始化

相对而言,初始化需要我们多注意一点点了。

因为我们有两种不同的方式来初始化一个parser。

  • 带有Usage选项:

    这样的好处是可以模拟带有帮助的终端使用,如下
>>> from optparse import OptionParser
>>> usage = "myprog[ -f <filename>][-s <xyz>] arg1[,arg2..]"
>>> parser=OptionParser(usage) #这里为类添加了参数usage

显示的时候就会使这样的了。

>>> 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  #自定义帮助信息
  • 不带Usage选项:

    正常来说可以不用设置参数。
parser = OptionParser()

添加选项

为命令行添加选项是我们这次最主要的工作了,也是核心。但是在添加选项之前,我们应该明白,为什么要添加选项?选项的工作原理是什么?这样我们才能更好的理解optparser的设计思想。

选项:类比于Unix的工作模式。举例 ls -a 或者 ls -all.

我们添加了一个名为all 的选项,为了简化操作,默认设置为a.

在OptionParser中要想实现这样的一个效果,我们只需要借助如下的一行代码。

# 这只是示意而已,没有什么意义
parser.add_option('-a' , '--all' )

核心

作为核心就是指add_option的其他的参数。有如下几个:

  • action: 验证输入数据类型是否和type 匹配,并将符合要求的这个参数存储到dest变量中。有以下几个属性:

    • store 默认值

      - store_false 标记而已 配合下边的那个store_true来进行代码的“标记”,辅助流程控制。
    • store_true 标记而已
  • type : 指的是对应于参数,如-f,-n等的接下来的那个参数的数据类型,有string,int,float等等
  • dest : 用于保存临时变量,其值可以作为options的属性进行访问。存储的内容就是如-f,-n 等紧挨着的那个参数内容。
  • help: 提供用户友好的帮助信息,一般可以用来解释本add_option方法的功能阐述。

单纯的讲起来很枯燥,下面看一个小例子就会明白了。

>>> 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'

对于action属性可以看看接下来的这段代码。

>>> 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参数的作用,其实就是给dest的默认值。

如果我们没有指定dest的值的话,default的值就会作为dest的默认值来进行使用!

>>> parser.add_option("-x", action="store", dest="verbose", default="defaultvalue")
<Option at 0x2d77148: -x>
>>> options, args = parser.parse_args() #这里没有传参数
>>> options.verbose
'defaultvalue'

完整的demo

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]

Python optparser库详解的更多相关文章

  1. Python turtle库详解

    Python turtle库详解 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在 ...

  2. Python爬虫系列-Urllib库详解

    Urllib库详解 Python内置的Http请求库: * urllib.request 请求模块 * urllib.error 异常处理模块 * urllib.parse url解析模块 * url ...

  3. Python 字符串方法详解

    Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息.        ...

  4. Python--urllib3库详解1

    Python--urllib3库详解1 Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用urllib3.Urllib3提供了很多pyt ...

  5. python/ORM操作详解

    一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...

  6. Python开发技术详解PDF

    Python开发技术详解(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1F5J9mFfHKgwhkC5KuPd0Pw 提取码:xxy3 复制这段内容后打开百度网盘手 ...

  7. Python环境搭建详解(Window平台)

    前言 Python,是一种面向对象的解释型计算机程序设计语言,是纯粹的自由软件,Python语法简洁清晰,特色是强制用空白符作为语句缩进,具有丰富和强大的库,它常被称为胶水语言. Python是一种解 ...

  8. 爬虫入门之urllib库详解(二)

    爬虫入门之urllib库详解(二) 1 urllib模块 urllib模块是一个运用于URL的包 urllib.request用于访问和读取URLS urllib.error包括了所有urllib.r ...

  9. python爬虫知识点详解

    python爬虫知识点总结(一)库的安装 python爬虫知识点总结(二)爬虫的基本原理 python爬虫知识点总结(三)urllib库详解 python爬虫知识点总结(四)Requests库的基本使 ...

随机推荐

  1. [Codeforces]856E - Satellites

    传送门 做法:每个卫星分别用连到左边圆与x轴交点的线的斜率和连到右边交点的线旋转90度的斜率可以表示成一个区间,问题转化成支持加/删区间和询问其中两个区间是否有交以及它们的交是否被其他区间包含.我一开 ...

  2. Codeforces Round #407 (Div. 1)

    人傻不会B 写了C正解结果因为数组开小最后RE了 疯狂掉分 AC:A Rank:392 Rating: 2191-92->2099 A. Functions again 题目大意:给定一个长度为 ...

  3. APIO 2013

    这套好丧--跟别的画风好不一样(中国风?).提答没做也没测,假装只有两题吧.140/200 T1.ROBOTS 题目大意:h*w的网格上有n个机器人编号1~n,网格上有空地.墙.顺/逆时针转向器,每次 ...

  4. 51Nod 1482 部落信号

    题目描述: 众所周知,如今的波兰在很久以前住着很多部落.他们的首都被n座山所环绕,形成一个圆圈.在每一座山上有一个哨兵,他日夜观察附近的山. 如果有任何危险,哨兵会在山上放一把火.如果在连接两座山的圆 ...

  5. POJ 3261 可重叠k次最长重复子串

    Milk Patterns Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 13127   Accepted: 5842 Ca ...

  6. [BZOJ]1085 骑士精神(SCOI2005)

    这种鲜明的玄学风格很明显就是十几年前的题目. Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐 ...

  7. Vue2学习(1)

    学习Vue2的computed 属性和 watcher 主要将computed 和methods和watcher作比较,对其各自的相关优缺点作了介绍. computed 属性会基于它所依赖的数据进行缓 ...

  8. 在Cisco Catalyst 3750端口做策略限速 QOS

    今天任务是在3750上限制端口的速率,本来以为是很简单的事,speed命令搞定,敲进去才知道speed命令只能叫端口速率改成10M或100M,也就是说只能起到端口高低速率的切换功能,不能自定义速率,后 ...

  9. Linux学习之Centos(三)------系统文件目录及含义详解

    Linux学习之Centos 之三------文件目录及含义 在了解了每个文件的相关种类与属性,以及了解了如何更改文件属性/权限的相关信息后,再来要了解的就是, 为什么每套Linux distribu ...

  10. vue开发中遇到的问题集锦(2)

    1,在搭建了一个vue的脚手架之后,写了第一个组件,路由也已经配置完毕,且页面的路由显示是:http://localhost:8080/#/userLogin,userLogin里面有内容,但是页面显 ...