使用OptionParser解析Ruby中的命令

在討論OptionParser's功能的文章中,我們討論了使用Ruby中的OptionParser優(yōu)于手動查看ARGV以手動解析命令的一些原因?,F(xiàn)在它開始學(xué)習(xí)如何使用OptionParser及其功能。

以下boilerplate代碼將用于本教程中的所有示例。要嘗試任何示例,只需將示例'sopts.on 阻止TODO評論旁邊。運行該程序?qū)⒋蛴∵x項has和ARGV的狀態(tài),允許您檢查開關(guān)的效果。

#!/usr/bin/env-ruby
require'optparse'
require'pp'
#此哈希將保留所有選項
#通過
#OptionParser從命令行解析。
options={}
optparse=OptionParser.newdo | opts |
#TODO:在此處放置命令行選項
#這顯示幫助屏幕,所有程序
#假定都有此選項。
opts.on('-h','--help','顯示此屏幕')do
放置opts
exit
end
end
#解析命令行。請記住,解析方法有兩種形式
#。'parse'方法只是解析
#ARGV,而'解析!'方法解析ARGV并刪除
?其中找到的任何選項,以及
#選項的任何參數(shù)。剩下的'是要調(diào)整大小的文件列表。
optparse.parse!
pp"選項:",選項
pp"ARGV:",ARGV

簡單開關(guān)

一個簡單的開關(guān)是一個沒有可選表單或沒有參數(shù)的參數(shù)。其效果是簡單地在選項哈希中設(shè)置標(biāo)志。沒有其他參數(shù)將傳遞給on方法。

選項[:simple]=false
opts.on('-s','--simple',"simple-argement")do
選項[:simple]=true
結(jié)束

切換強制參數(shù)

采用標(biāo)準(zhǔn)的開關(guān)ameter只需要以開關(guān)的長形式說明參數(shù)名稱。例如,&##34;-f","--file-file"表示-f或-file-switch采用單個稱為file的參數(shù),這個參數(shù)是強制性的。如果不同時傳遞參數(shù),則不能使用-f或--file。

選項[:mand]=""
opts.on('-m','--強制性文件',"強制性參數(shù)")do | f |
選項[:mand]=f
結(jié)束

使用可選參數(shù)

切換

切換參數(shù)don't必須是強制性的,它們可以是可選的。要聲明開關(guān)參數(shù)是可選的,請將其名稱放在開關(guān)說明的括號中。例如,&##34;--logfile[FILE]"表示FILE參數(shù)是可選的。如果沒有提供,程序?qū)⒓俣╯ane默認(rèn)值,例如稱為日志.

在該示例中,使用idioma=b | | c。這只是"a=b的簡寫,但如果b是假的或零,則a=c"。

選項[:opt]=false
opts.on('-o','--optional[OPT]',"可選參數(shù)")do | f |
選項[:OPT]=f | |"無"
結(jié)束

自動轉(zhuǎn)換為Float

OptionParser可以自動將參數(shù)轉(zhuǎn)換為某些類型。其中一種類型是Float。要自動將參數(shù)轉(zhuǎn)換為switch To Float,請在開關(guān)描述字符串之后將Float傳遞給on方法。

自動轉(zhuǎn)換很方便。他們不僅保存將字符串轉(zhuǎn)換為所需類型的步驟,還檢查您的格式,如果格式化不正確,將引發(fā)異常。

科普_1

選項[:float]=0.0
opts.on('-f','--float-NUM',float,"轉(zhuǎn)換為float")do | f |
選項[:float]=f
結(jié)束

OptionParser可以轉(zhuǎn)換為自動化的其他類型包括時間和整數(shù)。小常識

參數(shù)列表

參數(shù)可以解釋為列表。當(dāng)您轉(zhuǎn)換為Float時,可以將其視為轉(zhuǎn)換為數(shù)組。雖然您的選項字符串可以定義要調(diào)用的參數(shù)"a,b,c",但OptionParser會盲目地允許列表中的任何數(shù)量的元素。因此,如果您需要特定數(shù)量的元素,請務(wù)必自己檢查陣列長度。

選項[:list]=[]
opts.on('-l','--list a,b,c',Array,"list of parameters")do | l |
options[:list]=l
end

一組參數(shù)

有時將論點限制在轉(zhuǎn)向少數(shù)選擇是有道理的。例如,以下開關(guān)將僅采用單個強制參數(shù),并且參數(shù)必須是,可能之一。如果該參數(shù)是其他任何參數(shù),則將丟棄一個異常。

為此,在開關(guān)描述字符串之后將可接受的參數(shù)列表作為符號傳遞。

選項[:set]=:是
opts.on('-s','--set-OPT',[:yes,:no,:可能],"來自set")的參數(shù)do | s |
選項[:set]=s
結(jié)束

否定形式

交換機(jī)可以有否定的形式。開關(guān)-否定可以具有執(zhí)行相反效果的開關(guān),稱為-無否定。要在開關(guān)描述字符串中描述這一點,請將替代部分放在括號中:-[no-]否定。如果遇到第一個表單,則將true傳遞給塊,如果遇到第二個表單,則將阻止false。

選項[:neg]=false
opts.on('-n','--[no-]否定',"否定形式")做| n |
選項[:neg]=n
結(jié)束