使用OptionParser解析Ruby中的命令
在討論OptionParser's功能的文章中,我們討論了使用Ruby中的OptionParser優(yōu)于手動(dòng)查看ARGV以手動(dòng)解析命令的一些原因。現(xiàn)在它開始學(xué)習(xí)如何使用OptionParser及其功能。
以下boilerplate代碼將用于本教程中的所有示例。要嘗試任何示例,只需將示例'sopts.on 阻止TODO評(píng)論旁邊。運(yùn)行該程序?qū)⒋蛴∵x項(xiàng)has和ARGV的狀態(tài),允許您檢查開關(guān)的效果。
#!/usr/bin/env-ruby
require'optparse'
require'pp'
#此哈希將保留所有選項(xiàng)
#通過
#OptionParser從命令行解析。
options={}
optparse=OptionParser.newdo | opts |
#TODO:在此處放置命令行選項(xiàng)
#這顯示幫助屏幕,所有程序
#假定都有此選項(xiàng)。
opts.on('-h','--help','顯示此屏幕')do
放置opts
exit
end
end
#解析命令行。請(qǐng)記住,解析方法有兩種形式
#。'parse'方法只是解析
#ARGV,而'解析!'方法解析ARGV并刪除
?其中找到的任何選項(xiàng),以及
#選項(xiàng)的任何參數(shù)。剩下的'是要調(diào)整大小的文件列表。
optparse.parse!
pp"選項(xiàng):",選項(xiàng)
pp"ARGV:",ARGV
簡單開關(guān)
一個(gè)簡單的開關(guān)是一個(gè)沒有可選表單或沒有參數(shù)的參數(shù)。其效果是簡單地在選項(xiàng)哈希中設(shè)置標(biāo)志。沒有其他參數(shù)將傳遞給on方法。
選項(xiàng)[:simple]=false
opts.on('-s','--simple',"simple-argement")do
選項(xiàng)[:simple]=true
結(jié)束
切換強(qiáng)制參數(shù)
采用標(biāo)準(zhǔn)的開關(guān)ameter只需要以開關(guān)的長形式說明參數(shù)名稱。例如,#34;-f","--file-file"表示-f或-file-switch采用單個(gè)稱為file的參數(shù),這個(gè)參數(shù)是強(qiáng)制性的。如果不同時(shí)傳遞參數(shù),則不能使用-f或--file。
選項(xiàng)[:mand]=""
opts.on('-m','--強(qiáng)制性文件',"強(qiáng)制性參數(shù)")do | f |
選項(xiàng)[:mand]=f
結(jié)束
使用可選參數(shù)
切換切換參數(shù)don't必須是強(qiáng)制性的,它們可以是可選的。要聲明開關(guān)參數(shù)是可選的,請(qǐng)將其名稱放在開關(guān)說明的括號(hào)中。例如,#34;--logfile[FILE]"表示FILE參數(shù)是可選的。如果沒有提供,程序?qū)⒓俣╯ane默認(rèn)值,例如稱為日志.
在該示例中,使用idioma=b | | c。這只是"a=b的簡寫,但如果b是假的或零,則a=c"。
選項(xiàng)[:opt]=false
opts.on('-o','--optional[OPT]',"可選參數(shù)")do | f |
選項(xiàng)[:OPT]=f | |"無"
結(jié)束
自動(dòng)轉(zhuǎn)換為Float
OptionParser可以自動(dòng)將參數(shù)轉(zhuǎn)換為某些類型。其中一種類型是Float。要自動(dòng)將參數(shù)轉(zhuǎn)換為switch To Float,請(qǐng)?jiān)陂_關(guān)描述字符串之后將Float傳遞給on方法。
自動(dòng)轉(zhuǎn)換很方便。他們不僅保存將字符串轉(zhuǎn)換為所需類型的步驟,還檢查您的格式,如果格式化不正確,將引發(fā)異常。
選項(xiàng)[:float]=0.0
opts.on('-f','--float-NUM',float,"轉(zhuǎn)換為float")do | f |
選項(xiàng)[:float]=f
結(jié)束
OptionParser可以轉(zhuǎn)換為自動(dòng)化的其他類型包括時(shí)間和整數(shù)。小常識(shí)
參數(shù)列表
參數(shù)可以解釋為列表。當(dāng)您轉(zhuǎn)換為Float時(shí),可以將其視為轉(zhuǎn)換為數(shù)組。雖然您的選項(xiàng)字符串可以定義要調(diào)用的參數(shù)"a,b,c",但OptionParser會(huì)盲目地允許列表中的任何數(shù)量的元素。因此,如果您需要特定數(shù)量的元素,請(qǐng)務(wù)必自己檢查陣列長度。
選項(xiàng)[:list]=[]
opts.on('-l','--list a,b,c',Array,"list of parameters")do | l |
options[:list]=l
end
一組參數(shù)
有時(shí)將論點(diǎn)限制在轉(zhuǎn)向少數(shù)選擇是有道理的。例如,以下開關(guān)將僅采用單個(gè)強(qiáng)制參數(shù),并且參數(shù)必須是是,否或可能之一。如果該參數(shù)是其他任何參數(shù),則將丟棄一個(gè)異常。
為此,在開關(guān)描述字符串之后將可接受的參數(shù)列表作為符號(hào)傳遞。
選項(xiàng)[:set]=:是
opts.on('-s','--set-OPT',[:yes,:no,:可能],"來自set")的參數(shù)do | s |
選項(xiàng)[:set]=s
結(jié)束
否定形式
交換機(jī)可以有否定的形式。開關(guān)-否定可以具有執(zhí)行相反效果的開關(guān),稱為-無否定。要在開關(guān)描述字符串中描述這一點(diǎn),請(qǐng)將替代部分放在括號(hào)中:-[no-]否定。如果遇到第一個(gè)表單,則將true傳遞給塊,如果遇到第二個(gè)表單,則將阻止false。
選項(xiàng)[:neg]=false
opts.on('-n','--[no-]否定',"否定形式")做| n |
選項(xiàng)[:neg]=n
結(jié)束