[转载]python optionparser1
Python 有两个内建的模块用于处理命令行参数:
一个是 getopt,《Deep in python》一书中也有提到,只能简单处理 命令行参数;
另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的、符合Unix/Posix 规范的命令行说明。
示例
下面是一个使用 optparse 的简单示例:
- 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
输出:
- usage: <yourscript> [options]
- options:
- -h, --help show this help message and exit
- -f FILE, --file=FILE write report to FILE
- -q, --quiet don't print status messages to stdout
简单流程
首先,必须 import OptionParser 类,创建一个 OptionParser 对象:
- from optparse import OptionParser
- [...]
- parser = OptionParser()
然后,使用 add_option 来定义命令行参数:
- 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 组成的列表。
Actions
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")
默认地,type 为’string’。也正如上面所示,长参数名也是可选的。其实,dest 参数也是可选的。如果没有指定 dest 参数,将用命令行的参数名来对 options 对象的值进行存取。
store 也有其它的两种形式: store_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("-f","--file", action="store", dest="filename", default="foo.txt")
- parser.add_option("-v", action="store_true", dest="verbose", default=True)
又或者使用 set_defaults():
- parser.set_defaults(filename="foo.txt",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: �fault]")
当 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)
- -f FILE, --filename=FILE
- write output to FILE
- -m MODE, --mode=MODE interaction mode: novice, intermediate, or
- expert [default: intermediate]
注意: 打印出帮助信息后,optparse 将会退出,不再解析其它的命令行参数。
以上面的例子来一步步解释如何生成帮助信息:
自定义的程序使用方法信息(usage message):
Python代码- usage = "usage: %prog [options] arg1 arg2"
这行信息会优先打印在程序的选项信息前。当中的 %prog,optparse 会以当前程序名的字符串来替代:如 os.path.basename.(sys.argv[0])。
如果用户没有提供自定义的使用方法信息,optparse 会默认使用: “usage: %prog [options]”。
用户在定义命令行参数的帮助信息时,不用担心换行带来的问题,optparse 会处理好这一切。
设置 add_option 方法中的 metavar 参数,有助于提醒用户,该命令行参数所期待的参数,如 metavar=“mode”:
Python代码- -m MODE, --mode=MODE
注意: metavar 参数中的字符串会自动变为大写。
在 help 参数的帮助信息里使用 �fault 可以插入该命令行参数的默认值。
如果程序有很多的命令行参数,你可能想为他们进行分组,这时可以使用 OptonGroup:
- 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: [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)
- -fFILE, --file=FILE write output to FILE
- -mMODE, --mode=MODE interaction mode: one of 'novice', 'intermediate'
- [default], 'expert'
- Dangerous Options:
- Caution: use of these options is at your own risk. It is believed that
- some of them bite.
- -g Group option.
显示程序版本
象 usage message 一样,你可以在创建 OptionParser 对象时,指定其 version 参数,用于显示当前程序的版本信息:
- parser = OptionParser(usage="%prog [-f] [-q]", version="%prog 1.0")
这样,optparse 就会自动解释 –version 命令行参数:
- $ /usr/bin/foo --version
- foo 1.0
处理异常
包括程序异常和用户异常。这里主要讨论的是用户异常,是指因用户输入无效的、不完整的命令行参数而引发的异常。optparse 可以自动探测并处理一些用户异常:
- $ /usr/bin/foo -n 4x
- usage: foo [options]
- foo: error: option -n: invalid integer value: '4x'
- $ /usr/bin/foo -n
- usage: foo [options]
- foo: error: -n option requires an argument
用户也可以使用 parser.error() 方法来自定义部分异常的处理:
- (options, args) = parser.parse_args()
- [...]
- if options.a and options.b:
- parser.error("options -a and -b are mutually exclusive")
上面的例子,当 -b 和 -b 命令行参数同时存在时,会打印出“options -a and -b are mutually exclusive“,以警告用户。
如果以上的异常处理方法还不能满足要求,你可能需要继承 OptionParser 类,并重载 exit() 和 erro() 方法。
完整的程序例子
- from optparse import OptionParser
- [...]
- def main():
- usage = "usage: %prog [options] arg"
- parser = OptionParser(usage)
- parser.add_option("-f", "--file", dest="filename",
- help="read data from FILENAME")
- parser.add_option("-v", "--verbose",
- action="store_true", dest="verbose")
- parser.add_option("-q", "--quiet",
- action="store_false", dest="verbose")
- [...]
- (options, args) = parser.parse_args()
- if len(args) != 1:
- parser.error("incorrect number of arguments")
- if options.verbose:
- print "reading %s..." % options.filename
- [...]
- if __name__ == "__main__":
- main()
转载于:https://blog.51cto.com/openpy/1572237
相关文章:

回溯法实现正则匹配判断
*:匹配任意个字符 ?:匹配至多1个字符 <?phpclass MNode {public $strIndex;public $patIndex;public $leftMatch null; //精确匹配public $midMatch null; //模式匹配public $rightMatch null; //不能匹配public function __con…

Blender中的Python脚本介绍学习教程
Blender中的Python脚本介绍学习教程 MP4 |视频:h264,1280720 |音频:AAC,48000 Hz 语言:英语中英文字幕(根据原英文字幕机译更准确)|大小解压后:1.63 GB |时长:2h 39m 你会学到什么 云桥网络 平台获取教程…

linux的veth导致网络不通,linux的veth对网桥通信实验
本实验脚本如下:#!/bin/bash#网桥名称bridgebr0#网桥接入端ipip1192.168.10.1ip2192.168.10.2#veth名称tap1tap1tap2tap2#创建网络命名空间ip netns add ns1ip netns add ns2#创建并启用网桥br0,且关闭stpip link add $bridge type bridgeip link set $bridge type bridge stp_…

图片和文件上传的两款插件
订定转载于:https://www.cnblogs.com/mc67/p/4818276.html

2022-2028年中国装配式装修行业市场研究及前瞻分析报告
【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国装配式装修行业市场行业相关概述、中国装配式装修行业市场行业运行环境、分析了中国装配式…

使用 acl 库编写发送邮件的客户端程序
2019独角兽企业重金招聘Python工程师标准>>> 邮件做为最早和最广的互联应网用之一,已经与人们的生活息息相关。我们虽然经常使用 Outlook Express/Outlook/Foxmail 等邮件客户端发送邮件,但并不关心发送过程的细节。如果您是一名程序员&#…

Unreal Engine+Houdini创造程序性游戏场景视频教程
Unreal EngineHoudini创造程序性游戏场景视频教程 大小解压后:27.4G 持续时间14小时30分 包括项目文件 1920X1080 高清视频 程序游戏环境——虚幻引擎和Houdini 信息: 云桥网络 平台获取教程 导言: 欢迎来到虚幻引擎4和Houdini的程序游戏环境课程࿰…

清理内存clear
清理内存clear: package com.android.cleanprocesstool;import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import a…

linux mv 环境变量,linux环境变量,cp,mv命令,more,less,cat,tail,head,的使用...
linux环境变量,cp,mv命令,more,less,cat,tail,head,的使用[email protected] ~]# cp /usr/bin/ls /tmp/[[email protected] ~]# PATH$PATH:/tmp/ path的使用/usr/local/sbin…

进入Docker容器命令
进入Docker容器命令 docker执行命令: docker exec -it [容器ID或者容器名称] /bin/bash 如果出现下述问题: OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caused "exec: \"/bin/bash\": stat /b…

dmalloc 原文 翻译整理
http://blog.csdn.net/cardinal_508/article/details/5553387 L13 从快速入门开始(Quickstart) 这个库是一个文件中所有简化用法中最常见的:FTP下载它,编译它(-03),并连接到其他程序。 全部编译…

视频分辨率无损放大软件 Topaz Video Enhance AI 2.3.0
视频分辨率无损放大软件 Topaz Video Enhance AI 2.3.0 Topaz Video Enhance AI是一款非常好用的视频分辨率放大软件,用户可以通过这款软件将视频的分辨率进行自定义调节,最高能够将其放大至8K分辨率,并提供真实的细节和动作一致性ÿ…

linux 6.8 dns,CentOS6.8下安装DNS服务器
CentOS6.8下安装DNS服务器1、安装DNS服务器组件安装bind# yum install bind bind-libs bind-utils bind-chroot2、修改主配置文件/etc/named.conf需要修改的如下(带红色标注):# vi /etc/named.confoptions {listen-on port 53{ any; };//listen-on-v6 port 53 { ::1…

delphi 10 seattle 中 解决IOS 9 限制使用HTTP 服务问题
IOS 9 于17号早上正式开始推送,早上起来立马安装,这次升级包只有1G, 安装空间也大大降低(想起IOS 8 升级时,几乎把手机里面的东西删光了,满眼都是泪)。 虽然安装后,网上几乎是铺天盖…

2022-2028年中国装备制造产业深度分析及发展规划咨询建议报告(全卷)
【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国装备制造行业市场行业相关概述、中国装备制造行业市场行业运行环境、分析了中国装备制造行…

安装flex4 plug-in插件的时候遇到老是在起始处安装不起
2019独角兽企业重金招聘Python工程师标准>>> 安装flex4 plug-in插件的时候遇到老是在起始处安装不起 解决方案:1、有可能你安装的目录有中文字符 2、你放安装文件的目录有中文字符 3、关闭360安全卫士和防火墙 转载于:https://my.oschina.net/u/1159401/…

Python教学课程分享10-异常处理结构
10.1 异常概念与常见表现形式 异常是一个事件,这个事件会在程序执行过程中发生,影响程序的正常进行。一般情况下,在Python无法正常进行程序时就会发生异常。异常是Python的对象,它表示一个错误,在Python脚本在发生异常…

24组8K真实路面材质贴图素材 VizPeople – Pavement Textures V1
24组8K真实路面材质贴图素材 VizPeople – Pavement Textures V1 24组8K真实路面材质贴图素材 VizPeople – Pavement Textures V1 大小解压后:5.98G 我们的第一个纹理收藏!24个漂亮的无缝着色器,专为图形设计师和建筑可视化设计。现代和经…

linux查找项目中的问题,教你如何快速定位项目中慢查询[项目管理]
1. 使用对象: 项目经理或者项目管理者2. 数据库: mysql3. 快速定位慢查询:启动mysql时,启动慢查询日志:3.1 Window系统:第一种:bin\mysqlId.exe --safe-mode --slow-query-log (可在my.ini中配…

TCP的三次握手和四次分手
参考链接: http://blog.csdn.net/whuslei/article/details/6667471转载于:https://www.cnblogs.com/HuoAA/p/4826380.html

IDEA的Docker插件实战(Dockerfile篇)
IDEA的Docker插件实战(Dockerfile篇) IntelliJ IDEA的Docker插件能帮助我们将当前工程制作成Docker镜像、运行在指定的远程机器上,是学习和开发阶段的好帮手,本文一起来实战此插件的基本用法; 关于系列文章 本文是《IDEA的Docker插件实战》系…

技术变成客户才值钱
什么事与钱关联都显得有些俗,但没有钱又觉得这个世界这样的苦逼。作为一个技术人员,绝大多数人都在“苦逼”的生活中仰望“土豪”的生活,而唯一能够让我们达到这一目标的唯一途径就是将技术变成客户。技术不值钱似乎成了一个不争的实事&#…

浏览器会缓存js文件
项目中修改了一个js文件,然后重新发布到测试环境服务器,发现没有生效,页面依然报参数校验失败,经排查,发现浏览器中使用的还是旧的js文件,Chrome浏览器对js文件有缓存,只需要Ctrl shift del清…

视频色彩校正简介 Introduction to Video Color Correction
视频色彩校正简介 Introduction to Video Color Correction 视频色彩校正简介 Introduction to Video Color Correction MP4 |视频:h264,1280x720 |音频:AAC,44.1 KHz,2 Ch 云桥网络 平台获取教程! 技能水平:初级中级|语言&…

linux下移动c盘文件位置,问个问题我在unbuntu下为何找不到windows c盘文件
问个问题我在unbuntu下为何找不到windows c盘文件发布时间:2008-08-08 08:07:13来源:红联作者:fzmhlxk这是不是和重ghost安装过xp有关啊是不是引导文件的问题我查看了 应到文件title Ubuntu 7.10, kernel 2.6.22-15-genericroot (hd0,6)kernel /boot/vmlinuz-2.6.22-15-generic…

一个妹子图应用客户端源码
源码GankMeizhi,也是一个干妹纸应用的客户端,目前该应用还没有上传到应用商店中,大家可以自行修改一下吧,没错。又是一个妹子图app,依然采集自干货集中营。 源码下载: http://code.662p.com/view/11060.ht…

2022-2028年中国专用化学品行业投资分析及前景预测报告
【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国专用化学品行业市场行业相关概述、中国专用化学品行业市场行业运行环境、分析了中国专用化…

【设计模式】从设计到模式
http://www.cnblogs.com/wangfupeng1988/p/3920332.html http://www.cnblogs.com/wangfupeng1988/p/3687346.html http://www.cnblogs.com/wangfupeng1988/p/3768304.html

SVN可以拉项目但是提交时提示没有权限
我SVN是有权限的,而且也能从服务器上拉下来项目,但就是提交的时候提示403没有权限。 最后通过百度经验和翻找博客解决。 原因是路径问题: SVN在拉取项目的时候不区分大小写,但是在提交时是严格区分大小写的。检查路径可以在工作主…

Lumion模型库 Unique Pro Lumion Library 2021
Lumion模型库 Unique Pro Lumion Library 2021 独特的专业图书馆2021 大小:12G 云桥网络 平台获取素材 这些包包括: 01–集总效果–准备渲染的外部设置 用于Lumion 8及以上 189档集总外观效果 – 02–集总效果–准备渲染的内部设置 用于Lumion 8及以上 2…