python的内置模块中对于命令行的解析模块共两个getopt 和 optparse 。不过getopt过于简单,往往不能满足需求。此时可以使用optparse模块。这个模块相对于getopt更新,功能更强大。

简单使用

1. 导入模块实例化一个解析器

import optparse
parser = optparse.OptionParser() #实例化一个OptionParse,用来做解析器,可以传参数
optparse.OptionParser(self, prog=None, usage=None, description=None, epilog=None, option_list=None, option_class=, version=None, conflict_handler='error', formatter=None, add_help_option=True):
构造函数__init__(),用于创建一个命令行选项解析器实例;其中,参数:
(1).prog:当前脚本程序的名称;os.path.basename(sys.argv[0]);
(2).usage:描述当前脚本程序的用法字符串;显示该用法之前,格式"%prog"将被格式化成当前脚本程序的名称;
(3).description:当前脚本程序的简单描述、摘要、大纲;它会被显示在命令行选项的帮助之前;
(4).epilog:当前脚本程序的简单描述、摘要、大纲;它会被它会被显示在命令行选项的帮助之后;
(5).conflict_handler:命令行选项冲突处理器;比如,当命令行选项重复时,该如何让处理;可选值:error、resolve;
(6).add_help_option:是否自动生成帮助信息;True:是; False:否; 默认值是True;
(7).option_list:当前脚本程序的命令行选项列表;这个选项列表在standard_options_list中选项添加之后,但是在版本和帮助选项添加之前;可以手工创建该列表,该列表中的元素都使用函数make_option()生成;
例如:option_list=[make_option("-f","--file",action="store",type="string",dest="filename"), ...];
(8).option_class:在使用函数add_option()添加命令行选项到解析器时使用的类;默认为optparse.Option类;
(9).version:打印版本的信息;
(10).formatter:帮助信息格式;有两种格式:IndentedHelpFormatter和TitledHelpFormatter;
其中,参数prog在usage和version中使用格式字符串"%prog"代替os.path.basename(sys.argv[0]);

例如:

parser = optparse.OptionParser("usage%prog" + "-H  -p ")

2.使用OptionParser中的add_option方法添加命令行选项

parser.add_option('-H', dest='tgtHost', type='string', help='specify target host')
parser.add_option('-p', dest='tgtPort', type='string', help='specify target port[s] separated by comma')
optparse.OptionParser.add_option(self, *args, **kwargs):
该函数用于添加命令行选项;参数*args用于传递一个命令行选项的列表;**kwargs用于传递该命令行选项的属性;有几种用法:
(1).parser.add_option(self, optparse.Option):直接添加一个命令行选项类的实例;
(2).parser.add_option(self, option_list):直接添加一个命令行选项列表;option_list=[make_option(), ...];
(3).parser.add_option(*opt_str, ..., kwarg=val, ...);
常用的是第三种;这种用法的函数原型如下:
optparse.OptionParser.add_option(short_option[, long_option], action="store", type="store", dest=None, nargs=1, default=None, help="help text", metavar="");其中,参数:
(1).short_option:短选项字符串;例如,"-f"、"-X";
(2).long_option:长选项字符串;例如,"--file"、"--start";长选项和短选项共同构成可选参数*args或*opt_str;
(3).action:行为字符串;它指示optparse当解析到一个命令行选项时该如何处理;可选值store、store_true、store_false、store_const、append、append_const、count、callback、help、version;默认值是store,表示把命令行参数保存到options对象中;
(4).type:当action的值为存储方式时,type表示存储的数据的类型;有string、int、long、float、complex、choice;
(5).dest:当action的值为存储方式时,dest表示用于存储数据(当前命令行选项附加的参数值)的变量,它会成为函数parse_args()返回的options对象的属性,通过"对象名.属性名"的方式引用;如果不指定dest参数的值,则使用当前命令行选项的长选项名作为dest参数的缺省值和options对象的属性,来存储当前命令行选项的附加参数值;如果当前命令行选项没有指定长选项,则使用短选项名作为dest参数的缺省值和options对象的属性,来存储当前命令行选项的附加参数值;
(6).nargs:指定当前命令行选项应该需要接受的附加参数值的个数;默认值为1;多个参数值之间用空格隔开;当在命令行为该选项输入的附加参数值的个数多于nargs指定的个数时,则值取用前面的nargs个;当在命令行上为该选项输入的附加参数值的个数少于nargs所指定的个数时,则会报错;如果nargs>1,则Python解释器会把这nargs个参数值组装成一个元组(tuple),然后把这个元组传递给当前程序使用;
(7).default:当action的值为存储方式时,default用于指定dest表示的属性变量的缺省值,即,当前命令行选项附加的参数的缺省值;
(8).help:当前命令行选项的帮助、说明信息;
(9).metavar:占位字符串;用于在输出帮助信息时,代替当前命令行选项的附加参数的值进行输出;例如:"-f FILE --file FILE";这个例子中,字符串"FILE"就是metavar的值;
例如:add_oprion("-f", "--file", action="store", type="string", dest="fileName", default="file.txt", help="save host info", metavar="FILE");
当调用parse_args()函数之后,会返回一个options对象,dest参数的值"fileName"将作为options对象的属性名使用,即:options.fileName;同时把当前命令行选项的附加参数值保存在该属性中,即:options.fileName="file.txt";
备注:函数add_option()的各个参数其实就对应着类optparse.Option的对象的每一个属性;

3. 解析命令行参数

(options,args) = parser.parse_args()	#解析命令行
tgtHost = options.tgtHost #获取用户输入的参数
tgtPort = options.tgtPort
(options,args) = optparse.OptionParser.parse_args(self, args=None, values=None):
该函数用于解析命令行参数;其中,参数:
(1).args:用于传递需要被解析的命令行选项列表;默认是sys.argv[1:];
(2).values:用于传递命令行选项的附加参数值的对象;是optparse.Values类的对象;
返回值:是一个包含(options,args)对的tuple;
(1).options:与传递的options或者optparse对象相同,通过optparse创建的实例值;
(2).args:所有被处理的参数之后的剩余参数;

4、optparse.OptionParser.has_option(self, opt_str):
  该函数用于判断OptionParser实例是否有一个名为opt_str的命令行选项;返回值:True-有; False-无;
5、optparse.OptionParser.get_option(self, opt_str):
  该函数用于获取命令行选项opt_str的实例;若没有该选项,则返回None;
6、optparse.OptionParser.remove_option(self, opt_str):
  该函数用于移除命令行选项opt_str;若OptionParser对象中存在命令行选项opt_str,则移除,否则抛出ValueError异常;若存在多个opt_str的选项,则所有相关的选项都变成无效;
7、optparse.OptionParser.destroy():
  该函数用于销毁OptionParser对象实例;

例子:

parse = optparse.OptionParser("usage: python3 zip_file_crack.py " + "-f  -d ")
parse.add_option('-f', dest='zip_name', type='string', help='specify zip file')
(options, args) = parse.parse_args()
if (options.zip_name == None) or (options.dict_name == None):
print(parse.usage)
exit(0)
else:
zip_name = options.zip_name
dict_name = options.dict_name

选项行为

action的取值:
    store:表示把命令行参数值保存到options对象中,即,保存到dest参数值代表的变量中;
    store_true:用于处理命令行选项不带附加参数值的情况,该选项类似于一个开关,保存真值True;
    store_false:用于处理命令行选项不带附加参数值的情况,该选项类似于一个开关,保存假值False;
    store_const:保存一个常量值到dest参数值代表的变量中,常量值由const参数指定;
    append:保存/追加这个选项的参数到一个列表中;
    append_const:保存/追加这个选项的参数到一个列表中,常量值由const参数指定;
    count:把一个计数器递增1;
    callback:调用一个指定的函数;

冲突处理

当设定的命令行选项冲突时,用于处理该冲突的一种机制;比如:不小心把两个或多个命令行选项设置成相同的导致冲突的选项字符串;比如:
    parser.add_option("-n", "--dry-run", ...);
    parser.add_option("-n", "--noisy", ...);
指定冲突处理器的方法:
    1、在OptionParser的构造函数中通过参数指定:OptionParser(conflict_handler=handler);
    2、通过调用OptionParser对象的set_conflict_handler()指定:OptionParser.set_conflict_handler(handler);
    可用的冲突处理器有:error和resolve;默认是error;
        erro:冲突时触发异常OptionConflictError;
        resolve:冲突时智能解决;

选项属性

optparse.Option类的属性如下:
Option.action:定义命令行选项的行为;缺省值"store";
Option.type:定义选命令行项附加参数的类型;缺省值"string";
Option.dest:定义一个变量名称,用于保存命令行选项附加参数的值;该变量会变成options对象的属性;
Option.default:定义命令行选项附加参数值的缺省值;
Option.nargs:一个单一的命令行选项所附加的参数值的个数;
Option.const:作为action属性的值,用于指定保存的数据为常量;
Option.choices:作为type属性的值,用于指定从字符串列表中选择一个类型;
Option.callback:作为action的属性值,用于指定命令行选项的参数是一个可调用的对象或函数; <<<<-----待验证;
Option.callback_args:以元组结构为Option.callback属性所指定的可调用对象或函数传递可选参数;(*args)
Option.callback_kwargs:以字典结构为Option.callback属性所指定的可调用对象或函数传递可选参数;{key:val}
Option.help:帮助文本;such as --help/-h;若要隐藏该选项,可使用值optparse.SUPPRESS_HELP;
Option.metavar:命令行选项的附加参数值的占位符;用于打印帮助信息时,替代命令行选项的附加参数值进行输出;

回调函数

当Option的属性action的值为"callback"时,就要为add_option()函数传递callback参数的值了;此时,该选项就是一个命令选项,它可以单独执行一个功能,调用一个具体的函数,而参数callback就是用于指定需要调用的函数;如果,这个将要被调用的函数需要参数,则还要为函数add_option()传递callback_args参数或callback_kwargs参数,以方便为这个将要被调用的函数传递元组的参数或字典参数;例如:

  parser.add_option("opt_str", action="callback", callback=, default=None, metavar="FUNC");
parser.add_option(opt_str, action="callback", callback=, callback_args=(), callback_kwargs={}, nargs=1, default=None, metavar="FUNC");
callback函数的最小定义格式如下:最小格式不接艘参数
def func_name(option, opt_str, value, parser):
pass;
callback函数的最大定义格式如下: 最大格式接收参数
def func_name(option, opt_str, value, parser, *args, **kwargs):
pass;

python optparser模块的更多相关文章

  1. Kemaswill 机器学习 数据挖掘 推荐系统 Python optparser模块简介

      Python optparser模块简介

  2. optparser模块 与 ZIP爆破(Python)

    optparser模块: 为脚本传递命令参数. 初始化: 带 Usage 选项(-h 的显示内容 Usage:): >>> from optparse import OptionPa ...

  3. python相似模块用例(一)

    一:threading VS Thread 众所周知,python是支持多线程的,而且是native的线程,其中threading是对Thread模块做了包装,可以更加方面的被使用,threading ...

  4. optparser 模块 提取IP,端口,用户名,密码参数模板

    import optparse #class FtpClient(object): #自定义类可以自己修改 '''ftp客户端''' #def __init__(self): parser = opt ...

  5. Python标准模块--threading

    1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...

  6. Python的模块引用和查找路径

    模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...

  7. Python Logging模块的简单使用

    前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...

  8. Python标准模块--logging

    1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...

  9. python基础-模块

    一.模块介绍                                                                                              ...

随机推荐

  1. [LOJ#517]. 「LibreOJ β Round #2」计算几何瞎暴力[trie]

    题意 题目链接 分析 记操作异或和为 \(tx\) ,最后一次排序时的异或和为 \(ax\) ,每个数插入时的 \(tx\) 记为 \(b\). 我们发现,一旦数列排序,就会变得容易操作. 对于新加入 ...

  2. .Net Core2.0下使用Dapper遇到的问题

    今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上,在迁移的过程中也遇到一些很有意思的问题,值得和大家分享一下.下面我会还原迁移的每一个过程 ...

  3. NLP是什么

    NLP是什么 而在计算机领域, NLP(Natural Language Processing),也就是人们常说的「自然语言处理」,就是研究如何让计算机读懂人类语言. 这包括,既要能让计算机理解自然语 ...

  4. 009-定时关闭弹出广告窗口 By BoAi 20190414

    ;~ 定时关闭弹出广告窗口 By BoAi 20190414 ; ### 参数设置段 ######################################SingleInstance,forc ...

  5. Python学习第六篇——字典中的键和值

    favorite_language ={ "jen":"python", "sarah":"c", "edwa ...

  6. Let's-Bug修复日志

    Version 1.1 2015/11/16 修复了上传图片画质问题的Bug 修复了搜索功能的部分Bug 增加了下拉刷新的功能 修复了部分界面跳转之间的问题    

  7. UITableView加载数据,没有数据,没有网络界面处理

    https://blog.csdn.net/chmod_r_755/article/details/53231461 俗话说的好,傻逼的APP都是相似的,牛逼的APP各有各的牛逼...但是UITabl ...

  8. python 中的re模块,正则表达式

    一.re模块 re模块中常用的方法. match: 默认从字符串开头开始匹配,re.match('fun', 'funny') 可以匹配出来 'fun' match(pattern, string, ...

  9. nginx之快速查找配置文件

    nginx的配置放在nginx.conf文件中,一般我们可以使用以下命令查看服务器中存在的nginx.conf文件.   locate nginx.conf /usr/local/nginx/conf ...

  10. jquery on绑定事件

    描述:给一个或多个元素(当前的或未来的)的一个或多个事件绑定一个事件处理函数.(1.7版本开始支持,是 bind().live() 和 delegate() 方法的新的替代品) 语法:.on( eve ...