python中optionParser模块的使用方法
代码中经常看到这个模块,但是老是忘记怎么使用,故看其它博客试着写一篇适合自己理解的。
1.基本样式
from optparse import OptionParser # 引入模块
parser = OptionParser() # 创建一个OptionParser对象
# 添加一个待定义命令行参数,及其帮助文档
parser.add_option("-p", "--pdbk", type = 'int', action="store_true", # 长、短参数名、action值
dest="number",
default=3,
help="input number")
options,args = parser.parser_args() # 传入参数
2.参数说明
options,args
其中,options 是一个字典,options = {dest : default/传入的参数};args是一个列表。如果不传入任何参数,则options使用[default]中的默认值, args为空列表,如无[default]值,则options结果为None;如果传入相应参数,则根据action值的情况进行选择,详情请看下面action参数详解处。
长短参数名
可选
type
传入参数的类型,包括int/float/string, 可选,默认’string‘
action
action 是 parse_args() 方法的参数之一,它指示 optparse 当解析到一个命令行参数时该如何处理。actions 有一组固定的值可供选择,[’store ‘, ’store_true’, ‘store_false’, ‘store_const’, ‘append’, ‘count ’, ‘callback’]。
- ’store ‘默认,表示将命令行参数值保存在 options 对象里;
- ’store_true’, ‘store_false’,用于处理命令行参数传入值的情况,通过如下对比可发现:
# 1.default无默认值+不传入参数
optParser = OptionParser()
optParser.add_option("-v", action="store", dest="verbose1")
optParser.add_option("-m", action="store_true", dest="verbose2")
optParser.add_option("-q", action="store_false", dest="verbose3")
options, args = optParser.parse_args(args = [])#此处使用的是jupyetr notebook/lab需要填入args = [],其它IDE则不需要填入
# 结果
options={'verbose1': None, 'verbose2': None, 'verbose3': None}
args = []
# 2.default无默认值+传入参数
optParser = OptionParser()
optParser.add_option("-v", action="store", dest="verbose1")
optParser.add_option("-m", action="store_true", dest="verbose2")
optParser.add_option("-q", action="store_false", dest="verbose3")
args = ['-v','good luck to you', 'arge','-m','good luck to you', 'arge','-q','good luck to you', 'arge'] #传入的参数
options, args = optParser.parse_args(args)
# 结果
options={'verbose1': 'good luck to you', 'verbose2': True, 'verbose3': False}
args = ['arge', 'good luck to you', 'arge', 'good luck to you', 'arge']
# 3.default有默认值+不传入参数
optParser = OptionParser()
optParser.add_option("-v", action="store", dest="verbose1", default='gggg')
optParser.add_option("-m", action="store_true", dest="verbose2", default='gggg')
optParser.add_option("-q", action="store_false", dest="verbose3", default='gggg')
options, args = optParser.parse_args(args = [])#此处使用的是jupyetr notebook/lab需要填入args = [],其它IDE则不需要填入
# 结果
options={'verbose1': 'gggg', 'verbose2': 'gggg', 'verbose3': 'gggg'}
args = []
# 4.default有默认值+传入参数
optParser = OptionParser()
optParser.add_option("-v", action="store", dest="verbose1", default='gggg')
optParser.add_option("-m", action="store_true", dest="verbose2", default='gggg')
optParser.add_option("-q", action="store_false", dest="verbose3", default='gggg')
args = ['-v','good luck to you', 'arge','-m','good luck to you', 'arge','-q','good luck to you', 'arge'] #传入的参数
options, args = optParser.parse_args(args)
# 结果
options={'verbose1': 'good luck to you', 'verbose2': True, 'verbose3': False}
args = ['arge', 'good luck to you', 'arge', 'good luck to you', 'arge']
通过对比,可以很清楚地看到action=“store_true”, "store_false"在有传入参数时,相应的值才会变为‘True’, ‘False’,不传入参数时,根据有无[default]值决定。
当传入参数时,action="store"时,会将短参数后第一个值作为字典键的值,后续值放入列表中;action=“store_true”, "store_false"时,短参数后所有值放入列表中;
此外,还需要注意,当使用jupyetr notebook/lab时,需要填入args = [],否则会报错:
Usage: ipykernel_launcher.py [options]
ipykernel_launcher.py: error: no such option: -f
ERROR:root:Internal Python error in the inspect module.
Below is the traceback from this internal error.
……
TypeError: object of type 'NoneType' has no len()
help
当 optparse 解析到 -h 或者 –help 命令行参数时,会调用 parser.print_help() 打印程序的帮助信息。
from optparse import OptionParser
optParser = OptionParser()
optParser.add_option("-v", action="store", dest="verbose1",help = '输入点什么')
options, args = optParser.parse_args(args=[])
print (optParser.print_help())
输出:
Options:
-h, --help show this help message and exit
-v VERBOSE1 输入点什么
None