Använda OptionParser för att analysera kommandon i Ruby

I artikeln som diskuterade OptionParsers funktioner diskuterade vi några av orsakerna till att man använder OptionParser i Ruby att föredra framför att titta igenom ARGV manuellt för att analysera kommandon för hand. Nu är det dags att lära sig att använda OptionParser och dess funktioner.

Följande pannplattkod kommer att användas för alla exempel i denna handledning. För att prova något av exemplen, sätt bara exemplet opts.on blockera bredvid TODO-kommentaren. När du kör programmet kommer du att skriva ut statusen för alternativen har och ARGV, så att du kan undersöka effekterna av dina switchar.

#! / usr / bin / env ruby
kräver "optparse"
kräver "pp"
# Denna hash kommer att innehålla alla alternativ
# tolkad från kommandoraden av
# OptionParser.
alternativ =
optparse = OptionParser.new do | opts |
# TODO: Sätt kommandoradsalternativ här
# Detta visar hjälpskärmen, alla program är det
# antog att ha det här alternativet.
opts.on ('-h', '--help', 'Visa den här skärmen') gör
sätter val
utgång
slutet
slutet
# Analysera kommandoraden. Kom ihåg att det finns två former
# av analysmetoden. Metoden "analysera" analyserar helt enkelt
# ARGV, medan "parse!" metod analyserar ARGV och tar bort
# alla alternativ som finns där, liksom alla parametrar för
# alternativen. Det som finns kvar är listan över filer som ska ändras.
optparse.parse!
pp "Alternativ:", alternativ
pp "ARGV:", ARGV

Enkel switch

En enkel switch är ett argument utan valfria formulär eller inga parametrar. Effekten blir att helt enkelt sätta en flagga i alternativ-hash. Inga andra parametrar kommer att skickas till metod.

alternativ [: enkelt] = falskt
opts.on ('-s', '- enkel', 'Enkelt argument') gör
alternativ [: enkelt] = sant
slutet

Växla med obligatorisk parameter

Omkopplare som tar en parameter behöver bara ange parameternamnet i växelns långa form. Till exempel, "-f", "- fil FIL" betyder att omkopplaren -f eller --fil tar en enda parameter som heter FILE, och denna parameter är obligatorisk. Du kan inte använda varken -f eller -file utan att också lämna den en parameter.

optioner [: mand] = ""
opts.on ('-m', '- obligatorisk FIL', "Obligatoriskt argument") do | f |
alternativ [: mand] = f
slutet

Växla med valfri parameter

Bytparametrar behöver inte vara obligatoriska, de kan vara valfria. För att förklara en omkopplarparameter valfri, placera dess namn inom parentes i omkopplarbeskrivningen. Till exempel, "--logfile [FILE]" betyder att FIL-parametern är valfri. Om det inte levereras kommer programmet att anta ett sant standard, till exempel en fil som heter log.txt.

I exemplet, formspråket a = b || c är använd. Detta är bara kortfattat för "a = b, men om b är falskt eller noll, a = c".

alternativ [: opt] = falskt
opts.on ('-o', '- valfritt [OPT]', "Valfritt argument") do | f |
alternativ [: opt] = f || "ingenting"
slutet

Konvertera automatiskt till Float

OptionParser kan automatiskt konvertera argument till vissa typer. En av dessa typer är Float. För att automatiskt konvertera dina argument till en växel till Float, skicka Float till metod efter dina strängar för växelbeskrivning.

Automatiska omvandlingar är praktiska. De sparar inte bara steget för att konvertera strängen till önskad typ utan kontrollerar också formatet för dig och kommer att kasta ett undantag om det är felaktigt formaterat.

alternativ [: float] = 0.0
opts.on ('-f', '- float NUM', Float, "Convert to float") do | f |
alternativ [: float] = f
slutet

Vissa andra typer som OptionParser kan konvertera till inkluderar automatiskt Time and Integer.

Listor över argument

Argument kan tolkas som listor. Detta kan ses som omvandling till en matris, när du konverterade till Float. Medan din alternativsträng kan definiera den parameter som ska kallas "a, b, c", tillåter OptionParser blint ett antal element i listan. Så om du behöver ett visst antal element, se till att du själv kontrollerar matrislängden.

alternativ [: list] = []
opts.on ('-l', '- lista a, b, c', Array, "Lista över parametrar") do | l |
alternativ [: lista] = l
slutet

Uppsättning av argument

Ibland är det vettigt att begränsa argument till en växling till några val. Till exempel kommer följande switch endast att ta en enda obligatorisk parameter, och parametern måste vara en av ja, Nej eller kanske. Om parametern alls är något annat kommer ett undantag att kastas.

För att göra detta, passera en lista med acceptabla parametrar som symboler efter strängarna för omkopplarens beskrivning.

alternativ [: set] =: ja
opts.on ('-s', '- set OPT', [: ja,: nej,: kanske], "Parametrar från en uppsättning") do | s |
alternativ [: set] = s
slutet

Negated Forms

Omkopplare kan ha en negerad form. Bytet --negerade kan ha en som gör motsatt effekt, kallas --no-negeras. För att beskriva detta i strömställarens beskrivningssträng, placera den alternativa delen i parentes: --[Nr-] negerade. Om den första formen stöds överförs true till blocket och falskt kommer att blockeras om den andra formen stöds på.

alternativ [: neg] = falskt
opts.on ('-n', '- [no-] negated "," Negated former ") do | n |
alternativ [: neg] = n
slutet