python optparse模块学习

Python 有两个内建的模块用于处理命令行参数:

一个是 getopt,getopt只能简单处理 命令行参数。

另一个是 optparse,是一个能够让程式设计人员轻松设计出简单明了、易于使用、符合标准的Unix命令列程式的Python模块。生成使用和帮助信息。

下面是一个简单的示例脚本optparse_exampl_1.py:

[[email protected] python]# vim optparse_exampl_1.py

 

#!/usr/bin/env python

from optparse import OptionParser

parser = OptionParser()

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

help="write report to FILE", metavar="FILE")

parser.add_option("-q""--quiet",

action="store_false", dest="verbose", default=True,

help="don‘t print status messages to stdout")

(options, args) = parser.parse_args()

现在你可以在命令行进行如下输入:

 

<yourscript> --file=outfile -q

<yourscript> -f outfile --quiet

<yourscript> --quiet --file outfile

<yourscript> -q -foutfile

<yourscript> -qfoutfile

上面这些命令是相同效果的。除此之外, optparse 还为我们自动生成命令行的帮助信息:

 

<yourscript> -h

<yourscript> --help

optparse将打印脚本的选项和帮助信息:

 

[[email protected] python]# ./optparse_exampl_1.py -h

Usage: optparse_exampl_1.py [options]

Options:

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

-FILE--file=FILE  write report to FILE

-q, --quiet           don‘t print status messages to stdout

下面简单介绍optparse的用法:

aptparse 在大多数情况下是相当灵活和强大的,本文介绍常见的optparse用法。

首先要导入OptionParser类,在主程序中要创建一个类:

 

from optparse import OptionParser

[...]

parser = OptionParser()

现在可以定义命令行选项,基本语法是:

 

parser.add_option(opt_str, ...,

attr=value, ...)

每种选项各有一个或多个选项的字符串,比如 -f 或 --file,通常每个选项将有一个短选项和一个长选项。例如:

 

parser.add_option("-f""--file", ...)

你可以自由定义为许多短选项和尽可能多的长选项(包括零),但是至少要有一个选项字符串整体。

最后,一旦你已经定义好了所有的命令行参数,调用 parse_args() 来解析程序的命令行:

 

(options, args) = parser.parse_args()

注: 你也可以传递一个命令行参数列表到 parse_args();否则,默认使用 sys.argv[:1]。

parse_args() 返回的两个值:

options,它是一个对象(optpars.Values),保存有命令行参数值。只要知道命令行参数名,如 file,就可以访问其对应的值: options.file 。

args,它是一个由 positional arguments 组成的列表。

了解选项操作:

action 是 parse_args() 方法的参数之一,它指示 optparse 当解析到一个命令行参数时该如何处理。actions 有一组固定的值可供选择,默认是’store ‘,表示将命令行参数值保存在 options 对象里。

 

parser.add_option("-f""--file",

action="store"type="string", dest="filename")

args = ["-f""foo.txt"]

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

print options.filename

最后将会打印出 “foo.txt”。

当 optparse 解析到’-f’,会继续解析后面的’foo.txt’,然后将’foo.txt’保存到 options.filename 里。当调用 parser.args() 后,options.filename 的值就为’foo.txt’。

你也可以指定 add_option() 方法中 type 参数为其它值,如 int 或者 float 等等:

 

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

注意:这个选项没有长选项,长选项也是可选的,如果没有指定dest选项,将用命令行的参数名对options对象的值进行存取。store也有其他的两种形式: stort_true 和 store_false, 用于处理带命令行选项后面不带值的情况,例如: -v,-q等命令行参数。

 

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

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

这样的话,当解析到 ‘-v’,options.verbose 将被赋予 True 值,反之,解析到 ‘-q’,会被赋予 False 值。

其它的 actions 值还有:

store_const 、append 、count 、callback

默认值

parse_args() 方法提供了一个 default 参数用于设置默认值。如:

 

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

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

又或者使用set_defaults例如:

 

parser.set_defaults(verbose=True)

parser.add_option(...)

(options, args) = parser.parse_args()

程序生成帮助

optparse 另一个方便的功能是自动生成程序的帮助信息。你只需要为 add_option() 方法的 help 选项指定帮助信息文本:

 

usage = "usage: %prog [options] arg1 arg2"

parser = OptionParser(usage=usage)

parser.add_option("-v""--verbose",

action="store_true", dest="verbose", default=True,

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

parser.add_option("-q""--quiet",

action="store_false", dest="verbose",

help="be vewwy quiet (I‘m hunting wabbits)")

parser.add_option("-f""--filename",

metavar="FILE"help="write output to FILE")

parser.add_option("-m""--mode",

default="intermediate",

help="interaction mode: novice, intermediate, "

"or expert [default: %default]")

当 optparse 解析到 -h 或者 –help 命令行参数时,会调用 parser.print_help() 打印程序的帮助信息:

 

Usage: <yourscript> [options] arg1 arg2

Options:

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

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

-q, --quiet           be vewwy quiet (I‘m hunting wabbits)

-FILE--filename=FILE

write output to FILE

-m MODE, --mode=MODE  interaction mode: novice, intermediate, or

expert [default: intermediate]

(注意:当脚本打印帮助信息后会退出,不会解析其他选项参数)

自定义程序使用方法:

 

usage = "usage: %prog [options] arg1 arg2"

这行信息会优先打印在程序的选项信息前。当中的 %prog,optparse 会以当前程序名的字符串来替代:如 os.path.basename.(sys.argv[0])。

如果用户没有提供自定义的使用方法信息,optparse 会默认使用: “usage: %prog [options]”。

用户在定义命令行参数的帮助信息时,不用担心换行带来的问题,optparse 会处理好这一切。

设置 add_option 方法中的 metavar 参数,有助于提醒用户,该命令行参数所期待的参数,如 metavar=“mode”:

 

-m MODE, --mode=MODE

注意: metavar 参数中的字符串会自动变为大写。

在 help 参数的帮助信息里使用 %default 可以插入该命令行参数的默认值。

如果程序有很多的命令行参数,你可能想为他们进行分组,这时可以使用 OptionGroup

 

group = OptionGroup(parser, "Dangerous Options",

"Caution: use these options at your own risk.  "

"It is believed that some of them bite.")

group.add_option("-g", action="store_true"help="Group option.")

parser.add_option_group(group)

输出如下:

 

Usage: <yourscript> [options] arg1 arg2

Options:

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

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

-q, --quiet           be vewwy quiet (I‘m hunting wabbits)

-FILE--filename=FILE

write output to FILE

-m MODE, --mode=MODE  interaction mode: novice, intermediate, or

expert [default: intermediate]

Dangerous Options:

Caution: use these options at your own risk.  It is believed that some

of them bite.

-g                  Group option.

完整的列子:

 

group = OptionGroup(parser, "Dangerous Options",

"Caution: use these options at your own risk.  "

"It is believed that some of them bite.")

group.add_option("-g", action="store_true"help="Group option.")

parser.add_option_group(group)

group = OptionGroup(parser, "Debug Options")

group.add_option("-d""--debug", action="store_true",

help="Print debug information")

group.add_option("-s""--sql", action="store_true",

help="Print all SQL statements executed")

group.add_option("-e", action="store_true"help="Print every action done")

parser.add_option_group(group)

时间: 2024-11-13 06:52:20

python optparse模块学习的相关文章

Python subprocess模块学习总结

从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spawn*.os.popen*.popen2.*.commands.*不但可以调用外部的命令作为子进程,而且可以连接到子进程的input/output/error管道,获取相关的返回信息 一.subprocess以及常用的封装函数 运行python的时候,我们都是在创建并运行一个进程.像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec

Python inspect模块学习

今天发现Python inspect模块中一个有趣的功能, 可以让我们方便地检视Python库中的源代码, 知道模块具体是怎样实现的, 满足了像我这样有偷窥欲的人-.- 那就是inspect中的getsource 它的用法如下: 例如要检视Python的The Zen of Python 我们可以: In [1]: import inspect In [2]: import this The Zen of Python, by Tim Peters Beautiful is better tha

python OptParse模块的用法详解

OptParse模块的简单介绍 Python 有两个内建的模块用于处理命令行参数: 一个是 getopt只能简单处理 命令行参数: 另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的.符合Unix/Posix 规范的命令行说明.会自动帮你负责-h帮助选项. 要自己定制程序的参数选项控制,可以使用python自带的OptParse模块,当然也可以直接解析sys.argv里的参数(但是此比较麻烦) import optparse optparse 现在不再更新了,更新版本叫

Python time模块学习

Python time模块提供了一些用于管理时间和日期的C库函数,由于它绑定到底层C实现,因此一些细节会基于具体的平台. 一.壁挂钟时间 1.time() time模块的核心函数time(),它返回纪元开始的秒数,返回值为浮点数,具体精度依赖于平台. >>>import time >>>time.time() 1460599046.85416 2.ctime() 浮点数一般用于存储和比较日期,但是对人类不友好,要记录和打印时间,可以使用ctime(). >>

python os模块学习

一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台.如果是window 则用'nt'表示,对于Linux/Unix用户,它是'posix'. 2.os.getcwd() 函数得到当前工作目录,即当前Python脚本工作的目录路径. 3.os.listdir() 返回指定目录下的所有文件和目录名. >>> os.listdir(os.getc

python logging模块学习(转)

前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的HOWTOs文档很详细,连日志该怎么用都写了,所以有英文阅读能力的同学建议去阅读一下. Logging模块构成 组成 主要分为四个部分: Loggers:提供应用程序直接使用的接口 Handlers:将Loggers产生的日志传到指定位置 Filters:对输出日志进行过滤 Formatters:控制

python 各模块学习

核心模块 1.1. 介绍 1.2. _ _builtin_ _ 模块 1.3. exceptions 模块 1.4. os 模块 1.5. os.path 模块 1.6. stat 模块 1.7. string 模块 1.8. re 模块 1.9. math 模块 1.10. cmath 模块 1.11. operator 模块 1.12. copy 模块 1.13. sys 模块 1.14. atexit 模块 1.15. time 模块 1.16. types 模块 1.17. gc 模块

python optparser模块学习

optparse是专门用来在命令行添加选项的一个模块. 首先来看一段示例代码 from optparse import OptionParser MSG_USAGE = "myprog[ -f ][-s ] arg1[,arg2..]" optParser = OptionParser(MSG_USAGE) optParser.add_option("-f","--file",action = "store",type=&qu

Python pycurl模块 学习

pycurl模块的安装方法如下: easy_install pycurl #easy_install安装方法 pip install pycurl #pip安装方法 #源码安装方法 # 要求curl-config包支持,需要源码方式重新安装curl # wget http://curl.haxx.se/download/curl-7.36.0.tar.gz # tar -zxvf curl-7.36.0.tar.gz # cd curl-7.36.0 # ./configure # make &