Python中optparse模块使用浅析

来源:未知 浏览 149次 时间 2021-06-01 13:39

最近遇到一个问题是指定参数来运行某个特定的进程这很类似Linux中一些命令的参数了谷歌搜索引擎推广这很类似Linux中一些命令的参数了比如ls -a为什么加上-a选项会响应。optparse模块实现的也是类似的功能它是为脚本传递命令参数。

使用此模块前首先需要导入模块中的类OptionParser然后创建它的一个实例(对象):
代码如下:
from optparse import OptionParser
parser = OptionParser() #这里也可以定义类的参数后续有

Python中optparse模块使用浅析

   每个opt_str可以有多个选项字符串比如-f 和–file(就行Linux命令行中ls -a和ls –all效果一样)只要定义了这些选项则在命令行输入的时候这些选项就会被识别否则报错。opt_str的定义可以如下:
代码如下:
parser.add_option(“-f”, “–file”, …) #-f 和 –file 是作为调用时的参数的标签会被识别

当选项被定义好后则可以调用parse_args()函数来获取我们定义的选项和参数
代码如下:
(options, args) = parser.parse_args() #parse_args可以有参数不定义的话使用默认的sys.argv[1:]

Python中optparse模块使用浅析

add_option中最重要的四个option的属性是:action,type,dest(destination),help。这四个中action又是最基础的。

action参数(附带介绍了type、dest):

action参数告诉optparse该做什么当它在命令行中遇到选项时。action有三种存储方式:store、store_false、store_true。如果不指定action的值默认的是store它告诉optparse将继续读取下一个参数(type)保证类型的正确性并将它将值存储在一个变量(dest)中即将命令行中输入的字符串将它存为options的属性这样可以直接调用。啰嗦了一大堆我自己都被搞晕了~~~~先看个例子吧!

代码如下:
parser.add_option(“-f”, “–file”,action=”store”, type=”string”, dest=”filename”)
Option at 0x2d72f48: -f/–file
args = [“-f”, “foo.txt”] #这个是模拟命令行的输入
(options, args) = parser.parse_args(args)
options.filename
‘foo.txt’

上述:当optparse看到选项-f时它将继续读下一个参数是foo.txt并将它存储在options.filename(这个filename就是add_option中的dest)之后dest的值将作为parser的属性被存储。所以当调用parse_args函数时options.filename的值就是foo.txt。这个是以“string”类型存储的当然type也可以是int和float等比如下面的:
代码如下:
parser.add_option(“-n”, type=”int”, dest=”num”)

注意这个没有指定一个长字符串的选项(如:–number)这当然是可以的,不过命令行输入时选项就只能是-n了也没有指定action使用默认的“store”。再次使用模拟的命令行参数[“-n22”](一个参数)也可以写成[“-n 22”](作为两个参数来传递):
代码如下:
parser.add_option(“-n”, type=”int”, dest=”num”)
Option at 0x2d71308: -n
(options, args) = parser.parse_args([“-n22”])
print options .num
22

如果不指定type参数默认的是string类型所以一个最简单的方式可以写成这样:
代码如下:
parser.add_option(“-f”, dest=”filename”)

action另两种值分别是:“store_true”和“store_false”这一般作为一个标记使用例如开始运行一个程序时将flag设为True网站seo优化例如开始运行一个程序时将flag设为True退出时将flag设为False。看了下面的例子就全明白了:当选项遇到v时它将options.verbose设为True,当选项遇到q时它将options.verbose设为False:

代码如下:
from optparse import OptionParser
parser=OptionParser()
parser.add_option(“-v”, action=”store_true”, dest=”verbose”)
Option at 0x2ceb888: -v
parser.add_option(“-q”, action=”store_false”, dest=”verbose”)
Option at 0x2d68e48: -q
fakeArgs = [‘-v’,’hello’]
options, args = parser.parse_args(fakeArgs)
options.verbose
True
fakeArgs = [‘-q’,’bye bye’]
options, args = parser.parse_args(fakeArgs)
options.verbose
False
#如果同时写两个选项v和q它会以哪个为准呢我试了一下是以最后出现的为准呵呵~~
fakeArgs = [‘-q’,’bye bye’,’-v’,’hello’]
options, args = parser.parse_args(fakeArgs)
options .verbose
True

标签: 选项actionargs参数