黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

Python中optparse模塊使用淺析

系統(tǒng) 1898 0

最近遇到一個(gè)問(wèn)題,是指定參數(shù)來(lái)運(yùn)行某個(gè)特定的進(jìn)程,這很類(lèi)似Linux中一些命令的參數(shù)了,比如ls -a,為什么加上-a選項(xiàng)會(huì)響應(yīng)。optparse模塊實(shí)現(xiàn)的也是類(lèi)似的功能,它是為腳本傳遞命令參數(shù)。

使用此模塊前,首先需要導(dǎo)入模塊中的類(lèi)OptionParser,然后創(chuàng)建它的一個(gè)實(shí)例(對(duì)象):

復(fù)制代碼 代碼如下:

from optparse import OptionParser
parser = OptionParser()? #這里也可以定義類(lèi)的參數(shù),后續(xù)有

接著就可以添加選項(xiàng)了,基本語(yǔ)法:

復(fù)制代碼 代碼如下:

parser.add_option(opt_str, ...,??
????????????????? attr=value, ...)

  ? 每個(gè)opt_str可以有多個(gè)選項(xiàng)字符串,比如-f 和--file(就行Linux命令行中l(wèi)s -a和ls --all效果一樣),只要定義了這些選項(xiàng),則在命令行輸入的時(shí)候這些選項(xiàng)就會(huì)被識(shí)別,否則報(bào)錯(cuò)。opt_str的定義可以如下:
復(fù)制代碼 代碼如下:

parser.add_option("-f", "--file", ...)? #-f 和 --file 是作為調(diào)用時(shí)的參數(shù)的標(biāo)簽,會(huì)被識(shí)別

當(dāng)選項(xiàng)被定義好后,則可以調(diào)用parse_args()函數(shù)來(lái)獲取我們定義的選項(xiàng)和參數(shù)
復(fù)制代碼 代碼如下:

(options, args) = parser.parse_args() #parse_args可以有參數(shù),不定義的話(huà)使用默認(rèn)的sys.argv[1:]

parse_args()返回兩個(gè)值,一個(gè)是選項(xiàng)options(如:-f),另一個(gè)是參數(shù)args,即除選項(xiàng)options以外的值(如:test.txt)

add_option中最重要的四個(gè)option的屬性是:action,type,dest(destination),help。這四個(gè)中action又是最基礎(chǔ)的。

action參數(shù)(附帶介紹了type、dest):

action參數(shù)告訴optparse該做什么當(dāng)它在命令行中遇到選項(xiàng)時(shí)。action有三種存儲(chǔ)方式:store、store_false、store_true。如果不指定action的值,默認(rèn)的是store,它告訴optparse將繼續(xù)讀取下一個(gè)參數(shù)(type),保證類(lèi)型的正確性,并將它將值存儲(chǔ)在一個(gè)變量(dest)中,即將命令行中輸入的字符串將它存為options的屬性,這樣可以直接調(diào)用。??嗦了一大堆,我自己都被搞暈了~~~~,先看個(gè)例子吧!

復(fù)制代碼 代碼如下:

>>> parser.add_option("-f", "--file",action="store", type="string", dest="filename")

>>> args = ["-f", "foo.txt"] #這個(gè)是模擬命令行的輸入
>>> (options, args) = parser.parse_args(args)
>>> options.filename
'foo.txt'

上述:當(dāng)optparse看到選項(xiàng)-f時(shí),它將繼續(xù)讀下一個(gè)參數(shù)是foo.txt,并將它存儲(chǔ)在options.filename(這個(gè)filename就是add_option中的dest),之后dest的值將作為parser的屬性被存儲(chǔ)。所以,當(dāng)調(diào)用parse_args函數(shù)時(shí),options.filename的值就是foo.txt。這個(gè)是以“string”類(lèi)型存儲(chǔ)的,當(dāng)然type也可以是int和float等,比如下面的:

復(fù)制代碼 代碼如下:

parser.add_option("-n", type="int", dest="num")

注意,這個(gè)沒(méi)有指定一個(gè)長(zhǎng)字符串的選項(xiàng)(如:--number),這當(dāng)然是可以的,不過(guò)命令行輸入時(shí)選項(xiàng)就只能是-n了,也沒(méi)有指定action,使用默認(rèn)的“store”。再次使用模擬的命令行參數(shù)["-n22"](一個(gè)參數(shù)),也可以寫(xiě)成["-n? 22"](作為兩個(gè)參數(shù)來(lái)傳遞):
復(fù)制代碼 代碼如下:

>>> parser.add_option("-n", type="int", dest="num")

>>> (options, args) = parser.parse_args(["-n22"])
>>> print options .num
22

如果不指定type參數(shù),默認(rèn)的是string類(lèi)型,所以一個(gè)最簡(jiǎn)單的方式可以寫(xiě)成這樣:

復(fù)制代碼 代碼如下:

parser.add_option("-f", dest="filename")

action另兩種值分別是:“store_true”和“store_false”,這一般作為一個(gè)標(biāo)記使用,例如開(kāi)始運(yùn)行一個(gè)程序時(shí)將flag設(shè)為T(mén)rue,退出時(shí)將flag設(shè)為False。看了下面的例子就全明白了:當(dāng)選項(xiàng)遇到v時(shí),它將options.verbose設(shè)為T(mén)rue,當(dāng)選項(xiàng)遇到q時(shí),它將options.verbose設(shè)為False:

復(fù)制代碼 代碼如下:

>>> from optparse import OptionParser
>>> parser=OptionParser()
>>> parser.add_option("-v", action="store_true", dest="verbose")

>>> parser.add_option("-q", action="store_false", dest="verbose")

>>> 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
#如果同時(shí)寫(xiě)兩個(gè)選項(xiàng)v和q,它會(huì)以哪個(gè)為準(zhǔn)呢,我試了一下,是以最后出現(xiàn)的為準(zhǔn),呵呵~~
>>> fakeArgs = ['-q','bye bye','-v','hello']
>>> options, args = parser.parse_args(fakeArgs)
>>> options .verbose
True

Default參數(shù):

default參數(shù)很好理解了,即當(dāng)沒(méi)有指定dest的值時(shí),給出個(gè)默認(rèn)值,如下:

復(fù)制代碼 代碼如下:

>>> parser.add_option("-x", action="store", dest="verbose", default="hahaha")

>>> options, args = parser.parse_args() #這里沒(méi)有傳參數(shù)
>>> options.verbose
'hahaha'

如果這樣的話(huà),那下面這兩句的效果就一樣了(前提是不給parse_args()函數(shù)傳參:) 
復(fù)制代碼 代碼如下:

parser.add_option("-v", action="store_true", dest="verbose")
parser.add_option("-q", action="store_false", dest="verbose", default=True)

help參數(shù):

這個(gè)參數(shù)是為了讓我們定義的“命令”更為逼真,還提供了幫助消息了呢!呵呵~~簡(jiǎn)單用法如下:

復(fù)制代碼 代碼如下:

>>> from optparse import OptionParser
>>> usage = "myprog[ -f ][-s ] arg1[,arg2..]"
>>> parser=OptionParser(usage) #這里為類(lèi)添加了參數(shù)usage
>>> optParser.add_option("-f","--file",action = "store",type="string",dest = "fileName",help="no any help")

>>> fakeArgs = ['-f','file.txt']
>>> options, args = parser.parse_args(fakeArgs)
>>> options.fileName
'file.txt'
>>> parser.print_help()
Usage: myprog[ -f ][-s ] arg1[,arg2..]

Options:
? -h, --help??????????? show this help message and exit? #此兩行根據(jù)option自動(dòng)生成,比較智能額~~
? -f FILENAME, --file=FILENAME
??????????????????????? no any help? #這是我定義的幫助信息(呵呵,不太友好~~)
>>> parser.print_usage()
Usage: myprog[ -f ][-s ] arg1[,arg2..]? #這是類(lèi)的usage信息~~很逼真,有木有?

>>>


上述是介紹基本的語(yǔ)法,下面舉兩個(gè)例子,一個(gè)是網(wǎng)上找的一個(gè)模擬命令行的參數(shù)的例子,另一個(gè)是“真實(shí)”的例子~~~

Example1:

復(fù)制代碼 代碼如下:

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()

運(yùn)行結(jié)果是:

復(fù)制代碼 代碼如下:

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:

一個(gè)簡(jiǎn)單的例子,就是將給腳本傳選項(xiàng)n時(shí),則輸出的是n的參數(shù)的值,否則給出默認(rèn)值(腳本保存在E盤(pán)):

復(fù)制代碼 代碼如下:

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:? #當(dāng)有選項(xiàng)n時(shí),則使用給出的參數(shù)值
??? #num = options.intNumber
??? print options.intNumber,options.verbose

else:
??? for i in range(1,5):? #不給選項(xiàng)n的情況下,默認(rèn)輸出的是1~4
??????? #num = i
??????? print i

打開(kāi)cmd運(yùn)行如下:

Python中optparse模塊使用淺析_第1張圖片


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!??!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論