当前位置: 首页 > 编程日记 > 正文

Python optionParser模块的使用方法

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

一个是 getopt,《Deep in python》一书中也有提到,只能简单处理 命令行参数;

另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的、符合Unix/Posix 规范的命令行说明。

示例

from optparse import OptionParser 


parser = OptionParser() 


parser.add_option("-p", "--pdbk", action="store_true", 
                  dest="pdcl", 
                  default=False, 
                  help="write pdbk data to oracle db") 


parser.add_option("-z", "--zdbk", action="store_true", 
                  dest="zdcl", 
                  default=False, 
                  help="write zdbk data to oracle db") 

(options, args) = parser.parse_args() 

if options.pdcl==True: 
    print 'pdcl is true' 
if options.zdcl==True: 
    print 'zdcl is true' 


parser = OptionParser() 


parser.add_option("-p", "--pdbk", action="store_true", 
                  dest="pdcl", 
                  default=False, 
                  help="write pdbk data to oracle db") 
parser.add_option("-z", "--zdbk", action="store_true", 
                  dest="zdcl", 
                  default=False, 
                  help="write zdbk data to oracle db") 

(options, args) = parser.parse_args() 

if options.pdcl==True: 
    print 'pdcl is true' 
if options.zdcl==True: 
    print 'zdcl is true' 




parser = OptionParser()


parser.add_option("-t","--time",action="store",dest="filedate",help="appoint the logfile time,use like this '-t 130825'")


(options,args) = parser.parse_args()


####option####

if options.filedate:

filedate = options.filedate

else:

filedate = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%y%m%d')








可以替代getopt的一个模块

from optparse import OptionParser

#  生成一个实例
parser = OptionParser(usage="%prog -f server.list -u root ...  versrion 1",version="%prog 1")
parser.add_option("-f", "--file",dest="File",action="store",help="Host list")

# 保存了,可以通过 print options.filename

parser.add_option("-u", "--user",action="store", dest="User",help="Username")

# 没有指定dest参数,将用命令行的参数名来对options对象的值进行存取,这里就是User.

parser.add_option("-s", "--screen",action="store_true", dest="Screen",help="Output to the screen")

store_true这个action的意思是只有在使用该参数的时候存,也就是你加了-s参数,才会保存

(options, args) = parser.parse_args()
   parse_args(): #解析命令行的参数, 并将结果传给options

返回两个值:

1. options , 这是一个对象(optpars.Values),保存命令行参数值。只要知道命令行参数名,如file,就可以访问其对应的值:options.file。
2. args , 一个由 positional arguments 组成的列表

ARGDIR = vars(options)
 return ARGDIR
============================================
parser.add_option('-v', '–version', action='store_true', dest='version', default=False, help='show the version of this command')

#store_true这个action的意思是只有在使用该参数的时候存储, default则可以给一个默认值。也就是你加了-v 显示版本信息,否则不显示。






add_option用来加入选项,action是有store,store_true,store_false等,dest是存储的变量,default是缺省值,help是帮助提示 

最后通过parse_args()函数的解析,获得选项,如options.pdcl的值。

下面是一个使用 optparse 的简单示例:

Python代码 

  1. from optparse import OptionParser  

  2. [...]  

  3. parser = OptionParser()  

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

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

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

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

  8.                   help="don't print status messages to stdout")  

  9.   

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

现在,妳就可以在命令行下输入:

Python代码

  1. <yourscript> --file=outfile -q  

  2. <yourscript> -f outfile --quiet  

  3. <yourscript> --quiet --file outfile  

  4. <yourscript> -q -foutfile  

  5. <yourscript> -qfoutfile  

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

Python代码

  1. <yourscript> -h  

  2. <yourscript> --help 

输出:

Python代码

  1. usage: <yourscript> [options]  

  2.   

  3. options:  

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

  5.   -f FILE, --file=FILE  write report to FILE  

  6.   -q, --quiet           don't print status messages to stdout  

简单流程

首先,必须 import OptionParser 类,创建一个 OptionParser 对象:

Python代码 

  1. from optparse import OptionParser  

  2.   

  3. [...]  

  4.   

  5. parser = OptionParser()  

然后,使用 add_option 来定义命令行参数:

Python代码

  1. parser.add_option(opt_str, ...,  

  2.   

  3.                   attr=value, ...)  

每个命令行参数就是由参数名字符串和参数属性组成的。如 -f 或者 –file 分别是长短参数名:

Python代码

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

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

Python代码

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

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

parse_args() 返回的两个值:

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

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

Actions

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

示例

Python代码 

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

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

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

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

  5. print options.filename  

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

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

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

Python代码

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

默认地,type 为’string’。也正如上面所示,长参数名也是可选的。其实,dest 参数也是可选的。如果没有指定 dest 参数,将用命令行的参数名来对 options 对象的值进行存取。

store 也有其它的两种形式: store_true 和 store_false ,用于处理带命令行参数后面不 带值的情况。如 -v,-q 等命令行参数:

Python代码

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

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

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

其它的 actions 值还有:

store_const 、append 、count 、callback 。

默认值

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

Python代码 

  1. parser.add_option("-f","--file", action="store", dest="filename", default="foo.txt")  

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

又或者使用 set_defaults():

Python代码

  1. parser.set_defaults(filename="foo.txt",verbose=True)  

  2. parser.add_option(...)  

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

生成程序帮助

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

Python代码 

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

  2. parser = OptionParser(usage=usage)  

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

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

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

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

  7.                   action="store_false", dest="verbose",  

  8.                   help="be vewwy quiet (I'm hunting wabbits)")  

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

  10.                   metavar="FILE", help="write output to FILE"),  

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

  12.                   default="intermediate",  

  13.               help="interaction mode: novice, intermediate, "  

  14.                    "or expert [default: %default]")  

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

Python代码

  1. usage: <yourscript> [options] arg1 arg2  

  2.   

  3. options:  

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

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

  6.   -q, --quiet           be vewwy quiet (I'm hunting wabbits)  

  7.   -f FILE, --filename=FILE  

  8.                         write output to FILE  

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

  10.                         expert [default: intermediate]  

注意: 打印出帮助信息后,optparse 将会退出,不再解析其它的命令行参数。

以上面的例子来一步步解释如何生成帮助信息:

  • 自定义的程序使用方法信息(usage message):

    Python代码

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

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

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

用户在定义命令行参数的帮助信息时,不用担心换行带来的问题,optparse 会处理好这一切。设置 add_option 方法中的 metavar 参数,有助于提醒用户,该命令行参数所期待的参数,如 metavar=“mode”:Python代码 注意: metavar 参数中的字符串会自动变为大写。
  1. -m MODE, --mode=MODE  

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

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

Python代码

  1. group = OptionGroup(parser, ``Dangerous Options'',  

  2.                     ``Caution: use these options at your own risk.  ``  

  3.                     ``It is believed that some of them bite.'')  

  4. group.add_option(``-g'', action=''store_true'', help=''Group option.'')  

  5. parser.add_option_group(group)  

下面是将会打印出来的帮助信息:

Python代码

  1. usage:  [options] arg1 arg2  

  2.   

  3. options:  

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

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

  6.   -q, --quiet          be vewwy quiet (I'm hunting wabbits)  

  7.   -fFILE, --file=FILE  write output to FILE  

  8.   -mMODE, --mode=MODE  interaction mode: one of 'novice''intermediate'  

  9.                        [default], 'expert'  

  10.   

  11.   Dangerous Options:  

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

  13.     some of them bite.  

  14.     -g                 Group option.  

显示程序版本

象 usage message 一样,你可以在创建 OptionParser 对象时,指定其 version 参数,用于显示当前程序的版本信息:

Python代码 

  1. parser = OptionParser(usage="%prog [-f] [-q]", version="%prog 1.0")  

 

这样,optparse 就会自动解释 –version 命令行参数:

Python代码

  1. $ /usr/bin/foo --version  

  2. foo 1.0  

处理异常

包括程序异常和用户异常。这里主要讨论的是用户异常,是指因用户输入无效的、不完整的命令行参数而引发的异常。optparse 可以自动探测并处理一些用户异常:

Python代码 

  1. $ /usr/bin/foo -n 4x  

  2. usage: foo [options]  

  3.   

  4. foo: error: option -n: invalid integer value: '4x'  

  5.   

  6. $ /usr/bin/foo -n  

  7. usage: foo [options]  

  8.   

  9. foo: error: -n option requires an argument  

用户也可以使用 parser.error() 方法来自定义部分异常的处理:

Python代码

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

  2. [...]  

  3. if options.a and options.b:  

  4.     parser.error("options -a and -b are mutually exclusive")  

上面的例子,当 -b 和 -b 命令行参数同时存在时,会打印出“options -a and -b are mutually exclusive“,以警告用户。

如果以上的异常处理方法还不能满足要求,你可能需要继承 OptionParser 类,并重载 exit() 和 erro() 方法。

完整的程序例子

Python代码 

  1. from optparse import OptionParser  

  2. [...]  

  3. def main():  

  4.     usage = "usage: %prog [options] arg"  

  5.     parser = OptionParser(usage)  

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

  7.                       help="read data from FILENAME")  

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

  9.                       action="store_true", dest="verbose")  

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

  11.                       action="store_false", dest="verbose")  

  12.     [...]  

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

  14.     if len(args) != 1:  

  15.         parser.error("incorrect number of arguments")  

  16.     if options.verbose:  

  17.         print "reading %s..." % options.filename  

  18.     [...]  

  19.   

  20. if __name__ == "__main__":  

  21.     main()  










本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1637898,如需转载请自行联系原作者

相关文章:

squid命中率分析参数注释

默认squid配置文件里面已经加上acl all src 0.0.0.0/0.0.0.0acl manager proto cache_objecthttp_access allow all#cachemgr_passwd pass allhttp_access allow Manager all 3.0直接看这里基本的使用方法*取得squid运行状态信息&#xff1a; squidclient -p 80 mgr:info //注…

库克退休前的最后一战:不是苹果汽车而是……

整理 | 郑丽媛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 上个月库克迎来了他担任苹果 CEO 十周年的日子&#xff0c;我们也为此统计了一份成绩单&#xff1b;而下一个十年&#xff0c;库克可能不会再陪苹果完整走过了&#xff1a;今年 4 月库克在采访中表示…

VIM技巧:显示行号

在vi的命令模式下输入":set nu"&#xff0c;就有行号了&#xff0c;取消行号输入":set nonu"。 命令只对当前文档有效&#xff0c;如果想使vi打开文档时默认显示行号&#xff0c;可以修改vi的配置文件。 # vi ~/.vimrc 在这个文件中&#xff0c;添加 set n…

Python 自动化运维 pycurl

1.探测web服务质量&#xff08;HTTP状态码&#xff0c;请求延时&#xff0c;HTTP头信息&#xff0c;下载速度等&#xff09; web服务质量&#xff1a;1.服务可用性 2.服务响应速度 2.实例 12345678910111213141516171819202122232425262728293031323334353637383940414243impor…

Squid3反向代理安装与配置

一、编译安装 下载 #wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE25.tar.gz //找到地址#tar zxvf squid-3.0.STABLE25.tar.gz //稳定版#cd squid-3.0.STABLE25 #./configure --prefix/usr/local/squid / //必须 //以下几步可选 --enable-arp-ac…

ServiceStack OrmLite 数据库查询 几个实用方法 (继承表格式化集合等)

执行SQL语句&#xff1a;int result db.SqlScalar<int>("SELECT OBJECT_ID(name)", new { name "SomeName" });继承表的实现 &#xff08;存储于同一个表中&#xff09;[Alias("Table")] public abstract class MyBaseClass {public…

Deepsort + Yolo 实现行人检测和轨迹追踪

作者 | 李秋键 出品 | AI科技大本营(ID:rgznai100) 引言 行人检测是近年来计算机视觉领域的研究热点&#xff0c;同时也是目标检测领域中的难点。其目的是识别和定位图像中存在的行人&#xff0c;在许多领域中都有广泛的应用。交通安全方面&#xff0c;无人驾驶汽车通过提前…

推荐15个国外使用 CSS3 制作的漂亮网站

今天分享的作品集网站有些特别&#xff0c;因为他们都是使用 CSS3 技术制作的。对于设计师来说&#xff0c;为了吸引注意力&#xff0c;作品集必须展示出你的能力&#xff0c;这有点像制作简历&#xff0c;要让人们看到你所擅长的&#xff0c;突出的部分&#xff0c;这是一次推…

7_2判断两个单链表是否相交,若相交,求出第一个交点

转载请注明出处&#xff1a;http://www.cnblogs.com/wuzetiandaren/p/4251372.html 声明&#xff1a;现大部分文章为寻找问题时在网上相互转载&#xff0c;此博是为自己做个记录记录&#xff0c;方便自己也方便有类似问题的朋友&#xff0c;本文的思想也许有所借鉴&#xff0c;…

对抗软件系统复杂性①:如无必要,勿增实体

作者 | 袁进辉 我们经常面临如何评价一个大型软件系统质量的问题。首要的评价指标肯定是功能&#xff0c;软件是否满足主要的需求(do right things)。如果有多条技术路径可以实现同样的功能&#xff0c;人们倾向于选择更简单的办法。奥卡姆剃刀准则“如无必要&#xff0c;勿增实…

修改squid的Header中的X-Cache为Powered-By-LinuxTone

今天分析别人网站的时候&#xff0c;注意到国内的chinacache服务商的CDN加速&#xff0c;把squid默认的X-Cache修改为Powered-By-ChinaCache&#xff0c;如下图&#xff1a;以前注意了但是没去研究过&#xff0c;今天刚好有点空挡自己就来研究看看。我的squid版本&#xff1a;s…

NginxApachePHP参数汇总

1、Nginx vim /etc/nginx/conf.d/www.cmdschool.org.conf 12345678910111213client_max_body_size 30m; //上传文件大小改30M upstream www.cmdschool.org { server 10.168.82.25:87; ip_hash; } server { listen 80; server_name www.cmdschool.org; location / { proxy_pass …

android Intent PendingIntent的区别

含义&#xff1a;intent英文意思是意图&#xff0c;pending表示即将发生或来临的事情。 PendingIntent这个类用于处理即将发生的事情。比如在通知Notification中用于跳转页面&#xff0c;但不是马上跳转。 Intent 是及时启动&#xff0c;intent 随所在的activity 消失而消失。…

Squid如何提高命中率

缓存命中1.缓存时间设置&#xff0c;顾名思义&#xff0c;缓存时间设置的越长那么命中率也会相对较高。缓存与更新是一对矛盾的概念&#xff0c;既要做到高命中又要做到快速更新这个就需要自己对自己网站内容的了解然后指定合适的缓存策略。2.缓存能缓存的内容&#xff0c;什么…

海量秋招面试资料等你来拿!你离大厂也许并不远

秋招在即&#xff0c;你还在为秋招如何准备而发愁吗&#xff1f;你还在为拿不到大厂offer而苦恼吗&#xff1f;工欲善其事&#xff0c;必先利其器。金秋开学季&#xff0c;CSDN助力你的技术学习与成长&#xff0c;为你免费提供海量大厂面试资料&#xff0c;让你的秋招不再慌乱&…

Microsoft Dynamics CRM server 2013 中业务规则,有点像C#的正则表达式

Microsoft Dynamics CRM server 2013 中业务规则&#xff0c;我的理解就是有点像C#的正则表达式&#xff0c; 如方某个字段&#xff0c;必须输入什么范围的数值&#xff0c;其它字符不能乱输入。 打开方式有二种&#xff1a; 1. 种像上篇文章中写的那样&#xff0c; 在系统视图…

cCodeforces Round #286 (Div. 2)

A题。。暴力枚举在每个位置添加字符&#xff0c;然后检查一下是不是回文串 1 #include <iostream>2 #include <cstdio>3 #include <cstring>4 #include <algorithm>5 #include <cmath>6 #include <vector>7 8 using namespace std;9 10 #…

Sarg安装配置使用

SARG的全称是&#xff1a;Squid Analysis Report GeneratorSARG作为一款Squid日志分析工具&#xff0c;它采用html格式&#xff0c;详细列出了每一位用户访问internet的站点信息&#xff0c;时间占用信息&#xff0c;排名&#xff0c;连接次数&#xff0c;访问量&#xff0c;访…

OpenAI 以 10 亿美元出售「灵魂」,网友热评不再「Open」

编译 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; OpenAI 如何以 10 亿美元的价格出售其灵魂&#xff1a;GPT-3 和 Codex 背后的公司并不像它声称的那样开放。 当金钱成为障碍时&#xff0c;最好的意图可能会被破坏。 近日&#xff0c;一篇“How Open…

IBM IMM默认ID 及修改默认IP 方法

默认ID&#xff1a; http://192.168.70.125 用户名:USERID 密码:PASSW0RD (数字0) BIOS 下更改IP方法&#xff1a;&#xff08;另一种可进IMM 进行修改&#xff0c;此处不再介绍&#xff09; 本文转自easy80851CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/6…

squid 优化指南

很多squid 优化只限于在 squid参数和系统参数上面的调整。但是这个实在只是细枝末节的事情&#xff0c;只要不是太弱智的配置导致无法缓存&#xff0c;squid的性能不会有太大差距&#xff0c;也就提高10%左右&#xff0c;只有实际的业务针对squid 进行一些调整&#xff0c;squi…

Android TextView

2019独角兽企业重金招聘Python工程师标准>>> 1、TextView不用获取焦点也能实现跑马灯 public class MarqueeTextView extends TextView { Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { if(focused) …

人脸识别模型的动手实践!

作者&#xff1a;宋志龙 来源&#xff1a;Datawhale人脸识别已经成为生活中越来越常见的技术&#xff0c;其中最关键的问题就是安全&#xff0c;而活体检测技术又是保证人脸识别安全性的一个重要手段&#xff0c;本文将向大家简单介绍活体检测&#xff0c;并动手完成一个活体检…

Pyqt5学习系列

最近在学习Pyqt5做界面&#xff0c;找到了一个非常棒的博主的学习系列 在此记录下来&#xff1a; http://blog.csdn.net/zhulove86/article/category/6381941

编程方式刷新Squid缓存服务器的五种方法

网站进行内容更新是常有的事情&#xff0c;当被缓存的资源更新时&#xff0c;前端Squid 缓存服务器内容也必须要相应的更新&#xff0c;否则用户就可能会看到过期的数据。当没有程序支持时就需要每次登录到服务器上执行刷新操作&#xff0c;在服务器数量小的的时候这种方式还可…

Android 实时文件夹

实时文件夹是一种用来显示由某个ContentProvider提供的数据信息的桌面组件。要创建一个实时文件夹&#xff0c;必须要有两个方面的支持。 1&#xff0c;要定义一个用来创建实时文件夹的Activity。 2&#xff0c;所指定数据信息URI的ContentProvider必须支持实时文件夹时文件夹查…

《新程序员002》图书正式上市! 从“新数据库时代”到“软件定义汽车”

20年前&#xff0c;伴随着互联网打开信息化大门&#xff0c;技术人成为新时代的开拓者。在时代的召唤下&#xff0c;CSDN于2001年推出国内首个面向IT人员的专业杂志——《程序员》&#xff0c;成为一代代开发者的技术启蒙。20年后的今天&#xff0c;人工智能、云计算、大数据等…

Xtrabackup bug记录

xtrabackup 2.1.2 2.1.3 均出现以下问题&#xff1a; 123xtrabackup: warning: Log block checksum mismatch (block no 191401143 at lsn 3946288081920):expected 800836998, calculated checksum 800832263xtrabackup: warning: this is possible when the log block has n…

RHEL5上配置VNCSERVER

VNC一个远程显示系统&#xff0c;管理员通过它不仅仅可以在运行程序的本地机上察看桌面环境&#xff0c;而且可以从 Internet上的任何地方察看远程机器的运行情况&#xff0c;而且它具有跨平台的特性。 Linux 要使用远程桌面需要安装VNC&#xff0c;Centos5,RHCE5 已经自带了VN…

勒索软件层出不穷,Veeam “3-2-1-1-0”助力构建数据防护

随着 AI、IoT、云原生等前沿技术的发展&#xff0c;近年来勒索病毒的攻击手段不断升级&#xff0c;赎金也越来越高&#xff1a;例如今年美国最大燃油管道受攻击导致美国17个州和华盛顿特区进入紧急状态&#xff0c;2020 年 Ripple20 0day 漏洞曝光&#xff0c;波及数亿台联网设…