OptParse 模块的简单介绍
Python 有两个内建的模块用于处理命令行参数:
一个是 getopt 只能简单处理 命令行参数;
另一个是 optparse, 它功能强大, 而且易于使用, 可以方便地生成标准的, 符合 Unix/Posix 规范的命令行说明. 会自动帮你负责 - h 帮助选项.
要自己定制程序的参数选项控制, 可以使用 python 自带的 OptParse 模块, 当然也可以直接解析 sys.argv 里的参数 (但是此比较麻烦)
import optparse
optparse 现在不再更新了, 更新版本叫 argparse.
import argparse
OptParse 支持一般性 GUN 的选项方法, 包括:
无参选项, -v
有参选项, -p value, -para=value
值参一体, -pvalue (不支持长参数)
合并选项, -abc, -abcp value (最后一个可以是有参, 其余均无参)
解析时候 - 和 -- 的区别:
- 就看后面的值, 要是无参的, 那继续读下一个; 要是有参的, 就把参数读进来 (分隔或一体).
-- 直接读后面的值;
optparse modlue 基本用法
一, 基本用法
, 载入 OptionParser 类, 新建对象: OptionParser()
, 添加选项: add_option(...)
, 参数解析: parse_args()
举个例子:
- # _*_ coding: utf-8 _*_
- import optparse
- from optparse import OptionParser
- # 一个帮助文档解释字符串
- hstr = '%prog custom help string'
- parser = OptionParser(hstr, description='custom description', version='%prog 1.0')
- # 通过 OptionParser 类创建 parser 实例, 初始参数 usage 中的 %prog 等同于 os.path.basename(sys.argv[0]), 即
- # 你当前所运行的脚本的名字, version 参数用来显示当前脚本的版本.
- '''
添加参数,-f,--file 是长短 options, 有一即可.
dest='user' 将该用户输入的参数保存到变量 user 中, 可以通过 options.user 方式来获取该值
action 用来表示将 option 后面的值如何处理, 比如:
XXX.py -f test.txt
经过 parser.parse_args() 处理后, 则将 test.txt 这个值存储进 - f 所代表的一个对象, 即定义 - f 中的 dest
即 option.filename = 'test.txt'
action 的常用选项还有 store_true,store_false 等, 这两个通常在布尔值的选项中使用.
metavar 仅在显示帮助中有用, 如在显示帮助时会有:
-f FILE, --filename=FILE write output to FILE
-m MODE, --mode=MODE interaction mode: novice, intermediate, or expert
[default: intermediate]
如果 - f 这一项没有 metavr 参数, 则在上面会显示为 - f FILENAME --filename=FILENAME, 即会显示 dest 的值
defalut 是某一选项的默认值, 当调用脚本时, 参数没有指定值时, 即采用 default 的默认值.
- '''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='don\'t print the version')
- # parser.add_option('-v', '--version', action='store_true', dest='version', default=False, help='print the version')
- # parser.add_option('-v', '--version', action='store_true', dest='version', help='print the version')
- parser.add_option('-f', '--file', action='store', dest='file', help='file to handle')
- parser.add_option('-a', '--add', action='append', dest='add', help='add to handle')
- parser.add_option('-c', '--count', action='count', dest='count', help='count to handle')
- parser.add_option('-d', '--count1', action='count', dest='count', help='count1 to handle')
- #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', '-f', 'someForFile', '-vq', '-a', 'test1 test2 test3', '-c', '-d']
- testArgs = [ '-i', 'someForInput', 'someForFile', 'someForFile1', '-q', '-a', 'test1 test2 test3', '-c', '-d', '-h']
- options, args = parser.parse_args(testArgs)
- print('options : %s' % options)
- print('args : %s' % args)
- if options.input:
- print('input in args : %s' % options.input)
- if options.version:
- print('version 1.0.0')
- # if options.file:
- # print('file in args : %s' % options.file)
- if options.add:
- print('add in args : %s' % options.add)
- print('version in args', options.version)
结果:
- content -f
- do not content -f
Usage: optParse 模块的练习. py custom help string
- custom description
- Options:
- --version show program's version number and exit
- -h, --help show this help message and exit
- -i INPUT, --input=INPUT
- read input data from input file
- -o OUTPUT, --output=OUTPUT
- write data to output file
-q, --quite don't print the version
-a ADD, --add=ADD add to handle
-c, --count count to handle
- -d, --count1 count1 to handle
- Process finished with exit code 0
二, 新建对象
parse = OptionParse()
形参包括:
- 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):
三, 新建选项
3.1 可以使用下面几个方法:
add_option, add_option_group, add_options.
3.2 具体参数分析:
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. 常配合另一个 "store_true" 的选项使用同一个 dest 时使用. 不跟参数.
"append": 储存值到 dest 指定的属性, 并且是以数组的形式, 必须跟参数.
"store_const": 用来存储参数为 const 设置的值到 dest 指定的属性当中. 常用于 dest 为同名 2 个以上选项时的处理. 不跟参数.
"append_const": 用来存储参数为 const 设置的数组到 dest 指定的属性当中. 不跟参数.
"count": 使用后将给储存值到 dest 指定的属性值加 1, 可以统计参数中出现次数. 用途不大. 不跟参数.
"callback": 后面指定回调函数名 (不加括号), 会将相应 opt 和 args 传给回调函数.
"help", "version": 对应为帮助和版本. 要另外自己设计时使用.
当 action 设置为 store_ture / store_false 时, 解析参数时, 如果有值时为 Ture / False, 没有值时为 None.
当 dest 相同时, 一个 action 设置为 store_false, 另一个 action 设置为 store_ture 时, 解析参数时, 以在后面出现的为准.
四, 选项相关参数:
4.1, 可以用来同时设置多个选项的默认参数
- def set_default(self, dest, value):
- def set_defaults(self, **kwargs):
4.2, 检查是否有相应的选项
def has_option(self, opt_str):
4.3, 删除选项
def remove_option(self, opt_str):
4.4, 举个例子:
- 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')
输出:
- content -f
- do not content -f
4.5, 添加选项组 add_option_group()
如果 options 很多的时候, 可以进行分组, 然后进行添加. 分组的好处是, 对一系列程序参数可以分一个组, 如果有独立的 description , 可以另外处理. 使用如下:
- group = OptionGroup(parser) #创建分组
- group.add_option() #添加选项
- parser.add_option_group(group) #将分组加入到解释器
4.6, 添加选项数组 add_options([Option1,...])
将各个 Option 对象放在一个列表里再一起添加
五, 参数解析 parse_args()
使用 parse_args() 对参数进行解析, 默认是使用 sys.argv[1:] 作为参数, 也可以传递一个命令行参数列表: parse_args(list).
parse_args() 返回的两个值:
options, 它是一个对象, 保存有命令行参数值. 只要知道命令行参数名, 如 input, 就可以访问其对应的值: options.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.jianshu.com/p/bec089061742
来源: https://www.cnblogs.com/wj-1314/p/8974021.html