Python中optparse模块使用浅析
admin
2023-07-31 02:10:23
0

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

使用此模块前,首先需要导入模块中的类OptionParser,然后创建它的一个实例(对象):

复制代码 代码如下:
from optparse import OptionParser
parser = OptionParser()  #这里也可以定义类的参数,后续有

接着就可以添加选项了,基本语法:

复制代码 代码如下:
parser.add_option(opt_str, …,  
                  attr=value, …)

    每个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:]

parse_args()返回两个值,一个是选项options(如:-f),另一个是参数args,即除选项options以外的值(如:test.txt)

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\”)

上述:当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\”)

如果不指定type参数,默认的是string类型,所以一个最简单的方式可以写成这样:

复制代码 代码如下:
parser.add_option(\”-f\”, dest=\”filename\”)

action另两种值分别是:“store_true”和“store_false”,这一般作为一个标记使用,例如开始运行一个程序时将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\”)

Default参数:

default参数很好理解了,即当没有指定dest的值时,给出个默认值,如下:

复制代码 代码如下:
>>> parser.add_option(\”-x\”, action=\”store\”, dest=\”verbose\”, default=\”hahaha\”)

如果这样的话,那下面这两句的效果就一样了(前提是不给parse_args()函数传参:) 
复制代码 代码如下:
parser.add_option(\”-v\”, action=\”store_true\”, dest=\”verbose\”)
parser.add_option(\”-q\”, action=\”store_false\”, dest=\”verbose\”, default=True)

help参数:

这个参数是为了让我们定义的“命令”更为逼真,还提供了帮助消息了呢!呵呵~~简单用法如下:

复制代码 代码如下:
>>> from optparse import OptionParser
>>> usage = \”myprog[ -f ][-s ] arg1[,arg2..]\”
>>> parser=OptionParser(usage) #这里为类添加了参数usage
>>> optParser.add_option(\”-f\”,\”–file\”,action = \”store\”,type=\”string\”,dest = \”fileName\”,help=\”no any help\”)

Options:
  -h, –help            show this help message and exit  #此两行根据option自动生成,比较智能额~~
  -f FILENAME, –file=FILENAME
                        no any help  #这是我定义的帮助信息(呵呵,不太友好~~)
>>> parser.print_usage()
Usage: myprog[ -f ][-s ] arg1[,arg2..]  #这是类的usage信息~~很逼真,有木有?

>>>

上述是介绍基本的语法,下面举两个例子,一个是网上找的一个模拟命令行的参数的例子,另一个是“真实”的例子~~~

Example1:

复制代码 代码如下:
from optparse import OptionParser
usage = \”myprog[ -f ][-s ] arg1[,arg2..]\”
optParser = OptionParser(usage)
optParser.add_option(\”-f\”,\”–file\”,action = \”store\”,type=\”string\”,dest = \”fileName\”)
ooptParser.add_option(\”-v\”,\”–vison\”, action=\”store_false\”, dest=\”verbose\”,default=\’None\’,
                     help=\”make lots of noise [default]\”)
fakeArgs = [\’-f\’,\’file.txt\’,\’-v\’,\’good luck to you\’, \’arg2\’, \’arge\’] 
options, args = optParser.parse_args(fakeArgs)
print options.fileName
print options.verbose
print options
print args
print optParser.print_help()

运行结果是:

复制代码 代码如下:
file.txt
False
{\’verbose\’: False, \’fileName\’: \’file.txt\’}
[\’this is some what\’, \’arg2\’, \’arge\’]
Usage: myprog[ -f ][-s ] arg1[,arg2..]
Options:
  -h, –help            show this help message and exit
  -f FILENAME, –file=FILENAME
  -v, –vison           make lots of noise [default]

Example2:

一个简单的例子,就是将给脚本传选项n时,则输出的是n的参数的值,否则给出默认值(脚本保存在E盘):

复制代码 代码如下:
from optparse import OptionParser
optParser = OptionParser()
optParser.add_option(\”-n\”,\”–number\”,action = \”store\”,type=\”int\”,dest = \”intNumber\”)
optParser.add_option(\”-v\”,\”–version\”, action=\”store_false\”, dest=\”verbose\”,default=\’gggggggg\’,help=\”no help\”)
options, args = optParser.parse_args()
if options.intNumber is not None:  #当有选项n时,则使用给出的参数值
    #num = options.intNumber
    print options.intNumber,options.verbose

else:
    for i in range(1,5):  #不给选项n的情况下,默认输出的是1~4
        #num = i
        print i

打开cmd运行如下:

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python查找阿姆斯特朗数 题目解释 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...