博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之optparse
阅读量:5226 次
发布时间:2019-06-14

本文共 5000 字,大约阅读时间需要 16 分钟。

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

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

一个是optparse,功能更强大,而且易于使用,可以方便地生成标准的,符合Unix/Posix规范的命令行说明,会自动负责-h帮助选项

#!/usr/bin/env python2.6# coding: utf-8import optparse# 一个帮助文档解析字符串hstr = '%prog custom help string'parser = optparse.OptionParser(hstr, description='custom description', version='%prog 1.0')parser.add_option('-i', '--input', action='store', dest='input', help='read input data from input file')parser.add_option('-o', '--output', action='store', dest='output', help='write data to output file')parser.add_option('-q', '--quite', action='store_false', dest='version', help='dont\'t print the version')# parser.add_option('-v', '--version', action='store_true', dest='input', default=False, help='print the version'')# parser.add_option('-v', '--input', action='store', dest='input', help='print the version')# parser.add_option('-v', '--input', action='store', dest='input', help='print the version')parser.add_option('-f', '--file', action='store', dest='file', help='file to hand')parser.add_option('-a', '--add', action='append', dest='add', help='add to hand')parser.add_option('-c', '--count', action='count', dest='count', help='count to hand')parser.add_option('-d', '--count1', action='count', dest='count', help='count1 to hand')# parser.add_option('-v', '--version', dest='version')if parser.has_option('-f'):    print ('content -f')    parser.set_default('-f', 'myFile')    parser.remove_option('-f')if not parser.has_option('-f'):    print ('do not content -f')# 用一个数组模拟命令参数testArgs = ['-i', 'someForInput', 'someForFile', 'someForFile1', '-q', '-a', 'test1 test2 test3', '-c', '-d', '-h']options, args = parser.parser_args(testArgs)print 'option: %s' % optionsprint 'args: %s' % argsif options.input:    print 'input in args: %s' % options.inputif options.version:    print 'version 1.0.0'if options.add:    print 'add in args: %s' $ options.addprint 'version in args', options.version

  

 

 

Optparse支持一般性GUN的选项方法,包括

无参选项:-v

有参选项:-p value , -para=value

参值一体:-pvalue(不支持长参数)

合并选项:-abc,-abcp value(最后一个可以是有参的,其余均无参)

 

解析时,- 和 -- 的区别

- 就看后面的值,要是无参的,那就继续读下一个;要是有参,就把参数读进来(分隔或一体)

-- 直接读后面的值

 

optparse现在不更新了,更新版本叫argparse

 

optparse module

基本用法:

1 载入OptionParse类,新建对象:OptionParser()

2 添加选项:add_option(...)

3 参数解析:parse_args()

 

新建对象

parser = optparse.OptionParser()

形参包括:

def __init__(self,  usage=None,  option_list=None,  option_class=Option,  version=None,  conflict_handler="error",  description=None,  formatter=None,  add_help_option=True,  prog=None,  epilog=None):

 

新建选项:

可以使用:add_options,add_option_group,add_option

add_option: 方法在前面的参数为命令的选项,可以为等价的短名或长名,一般是前面为短名,后面为长名

可配置的参数:

dest:可以决定解析后,取值时的属性名,尤其适于有多个等价参数,不指定时就是选项不加-的字符串

type:选项的值类型,值的默认类型为字符串,这里将值指定为其他类型

default:缺省值,没有设置缺省值的为None

help:选项中有-h时打印help信息

metavar:表示显示到help中选项的默认值

choices:当type设置为choices时,需要设置此值

const:指定一个常量给选项,该常量值将用于后面store_const和append_const,一起合用

action:用于控制对选项和参数的处理,像无参数选项处理,可以设置为以下几种字符串:

  store:储存值到dest指定的属性,强制要求后面提供参数

  store_true:当使用该选项时,后面的dest设置为true,不跟参数

  store_false:当使用该选项时,后面的dest设置为false,常用于dest为同名2个以上选项时的处理,  不跟参数

  append:储存值到dest指定的属性中,并且以数组形式,必须跟参数

  store_const:用来存储参数为const设置的值到dest指定的属性当中,常用于dest为同名2个以上选项时的处理,不跟参数

  append_const:用来存储参数为const设置的数组到dest指定的属性,不跟参数

  count:使用后将给存储值到dest指定的属性加1,可以统计参数中出现的次数,用途不大,不跟参数

  callback:后面指定回调函数名(不加括号),会将相应的opt和args传给回调函数

  help,version:对应帮助和版本,要另外自己设计时使用

当action设置为store_true/store_false时,解析参数时,如果有值时为true/false,没有值时为None

当dest相同时,一个action设置为store_false,另一个action设置为store_true时,解析参数时,以后面出现的为准

 

选项相关参数

可以用来同时设置多个选项的默认参数

def set_default(self, opt, value):def set_defaults(self, **kwargs): 

检查是否有相应选项

def has_option(self, opt_str):

删除选项

def remove_option(self, opt_str):

eg:

parser = OptionParser()parser.add_option('-f', '--file', action='store', dest='file', help='file to handle')if parser.has_option('-f'):    print('content -f')    parser.set_default('-f', 'myFile')    parser.remove_option('-f')if not parser.has_option('-f'):    print('do not content -f')

输出

1 content -f2 do not content -f

添加选项组add_option_group()

如果options很多的时候,可以进行分组,然后进行添加,分组的好处是,对一系列程序参数可以分一个组,如果有独立的description,可以另外处理,使用如下:

group = OptionGroup(parser)  #创建分组group.add_option() #添加选项parser.add_option_group(group) #将分组加入到解释器

添加选项数组add_options([option1,...])

将各个Option对象放在一个列表里再一起添加

 

参数解析 parse_args()

使用parse_args()对参数进行解析,默认是使用sys.argv[1:]作为参数,也可以传递一个命令行参数列表:parse_args(list)

parse_args有两个值:

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

args:它是没被解析的命令行参数列表

 

帮助文档

默认自动带有-h和--help来输出帮助文档,输出后程序终止

帮助文档由三部分组成:

usage帮助部分:usage帮助部分一般是在OptionParser初始化时输入,为第一个参数,也可以使用具体形参名指定,可以使用%prog来表示当前的程序名

description描述部分:在初始化OptionParser时,description形参指定的内容

选项以及选项说明部分:选项加入时定义的说明文字

 

OptionParser的形参version可以指定--version输出的字符串,同样支持%prog,如version="%prog 1.0"

# 一个帮助文档解释字符串hstr = '%prog custom help string'parser = OptionParser(hstr, description='custom description')

 get_usage(),get_description(),get_version() 获取对应的字符串

print_help(),print_usage(),print_description(),print_version() 输出相应的内容

error(str):出错并输出str

 

 

 

  

 

转载于:https://www.cnblogs.com/yyf573462811/p/9579535.html

你可能感兴趣的文章
如何解除循环引用
查看>>
android中fragment的使用及与activity之间的通信
查看>>
字典【Tire 模板】
查看>>
jquery的contains方法
查看>>
python3--算法基础:二分查找/折半查找
查看>>
Perl IO:随机读写文件
查看>>
Perl IO:IO重定向
查看>>
转:基于用户投票的排名算法系列
查看>>
WSDL 详解
查看>>
[转]ASP数组全集,多维数组和一维数组
查看>>
C# winform DataGridView 常见属性
查看>>
逻辑运算和while循环.
查看>>
Nhiberate (一)
查看>>
c#后台计算2个日期之间的天数差
查看>>
安卓开发中遇到的小问题
查看>>
ARTS打卡第3周
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
cookies相关概念
查看>>
CAN总线波形中ACK位电平为什么会偏高?
查看>>
MyBatis课程2
查看>>