OptionParser Kommandoradsalternativ Ruby Way

Ruby är utrustad med ett kraftfullt och flexibelt verktyg för att analysera kommandoradsalternativ, OptionParser. När du lär dig hur du använder detta kommer du aldrig tillbaka att titta igenom ARGV manuellt. OptionParser har ett antal funktioner som gör det ganska tilltalande för Ruby-programmerare. Om du någonsin har analyserat alternativ för hand i Ruby eller C, eller med getoptlong C-funktion, ser du hur välkomna vissa av dessa förändringar är.

  • OptionParser är TORR. Du behöver bara skriva kommandoradsväxeln, dess argument, koden som ska köras när den stöter på och kommandoradsväxlingsbeskrivningen en gång i ditt skript. OptionParser genererar automatiskt hjälpskärmar för dig från denna beskrivning, och drar allt om argumentet från dess beskrivning. Till exempel kommer den att känna till - fil [FIL] alternativet är valfritt och tar ett enda argument. Det kommer också att veta det - [- no] -verbose är verkligen två alternativ och kommer att acceptera båda formerna.
  • OptionParser konverterar automatiskt alternativ till en viss klass.
    instagram viewer
    Om alternativet tar ett heltal kan det konvertera valfri sträng som skickas på kommandoraden till ett heltal. Detta minskar några av de tedium som är involverade i att analysera kommandoradsalternativ.
  • Allt är mycket inneslutet. Alla alternativ finns på samma plats, och effekten av alternativet är rätt vid sidan av definitionen för alternativet. Om alternativ måste läggas till, ändras eller någon helt enkelt vill se vad de gör, finns det bara ett ställe att titta på. När kommandoraden har analyserats kommer en enda Hash eller OpenStruct att innehålla resultaten.

Tillräckligt redan, Visa mig någon kod

Så här är ett enkelt exempel på hur du använder OptionParser. Det använder inte någon av de avancerade funktionerna, bara grunderna. Det finns tre alternativ, och ett av dem tar en parameter. Alla alternativ är obligatoriska. Det finns -v / - verbose och Q / - snabb alternativ, liksom -l / - loggfil FIL alternativ. Dessutom tar skriptet en lista över filer oberoende av alternativen.

 #! / usr / bin / env ruby

 # Ett skript som låtsas ändra storlek på ett antal bilder

 kräver "optparse"


 # Denna hash kommer att innehålla alla alternativ

 # tolkad från kommandoraden av

 # OptionParser.

 alternativ = {}


 optparse = OptionParser.new do | opts |

 # Ställ in ett banner, som visas högst upp

 # på hjälpskärmen.

 opts.banner = "Användning: optparse1.rb [alternativ] fil1 fil2 ..."


 # Definiera alternativen och vad de gör

 alternativ [: verbose] = falskt

 opts.on ('-v', '--verbose', 'Output more information') gör

 alternativ [: verbose] = true

 slutet


 alternativ [: snabb] = falskt

 opts.on ('-q', '--quick', 'Utför uppgiften snabbt') gör

 alternativ [: snabb] = sant

 slutet


 alternativ [: logfile] = noll

 opts.on ('-l', '--logfil FIL', 'Skriv logg till FIL') do | fil |

 optioner [: logfile] = fil

 slutet


 # 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!


 sätter "Att vara verbos" om alternativ [: verbose]

 sätter "Att vara snabb" om alternativ [: snabb]

 sätter "Loggning till fil # {alternativ [: logfil]}" om alternativ [: logfil]


 ARGV.each do | f |

 sätter "Ändra storlek på bild nr {f} ..."

 sova 0,5

 slutet

Undersökning av koden

Till att börja med, optparse bibliotek krävs. Kom ihåg att detta inte är en pärla. Den levereras med Ruby, så det finns inget behov att installera en pärla eller kräva RubyGems innan optparse.

Det finns två intressanta objekt i det här skriptet. Den första är alternativ, förklarade högst upp. Det är en enkel tom hash. När alternativ definieras skriver de sina standardvärden till denna hash. Till exempel är standardbeteendet för det här skriptet inte vara ordbok, så flaggor [: utförlig] är inställd på falsk. När alternativ stöds på kommandoraden kommer de att ändra värdena i alternativ för att återspegla deras effekt. Till exempel när -v / - verbose påträffas kommer den att tilldela true till flaggor [: utförlig].

Det andra intressanta objektet är optparse. Det här är OptionParser objektet självt. När du konstruerar detta objekt passerar du det ett block. Detta block körs under konstruktionen och kommer att skapa en lista med alternativ i interna datastrukturer och gör dig redo att analysera allt. Det är i detta block som all magin händer. Du definierar alla alternativ här.

Definiera alternativ

Varje alternativ följer samma mönster. Du skriver först standardvärdet i hash. Detta kommer att ske så snart som OptionParser är konstruerad. Därefter ringer du till metod, som definierar själva alternativet. Det finns flera former av denna metod, men endast en används här. De andra formerna låter dig definiera omvandlingar av automatisk typ och värden som ett alternativ är begränsat till. De tre argumenten som används här är den korta formen, den långa formen och beskrivningen av alternativet.

De metoden kommer att sluta ett antal saker från den långa formen. En sak är att sluta sig är närvaron av några parametrar. Om det finns några parametrar i alternativet, kommer det att skicka dem som parametrar till blocket.

Om alternativet stöter på kommandoraden överförs blocket till metoden körs. Här gör blocken inte mycket, de ställer bara in värden i alternativ-hash. Mer kan göras, till exempel att kontrollera att en fil som hänvisas till finns, etc. Om det finns några fel kan undantag kastas från dessa block.

Slutligen analyseras kommandoraden. Detta händer genom att ringa parse! metod på en OptionParser objekt. Det finns faktiskt två former av denna metod, parse och parse!. Som versionen med utropstecken antyder är den förstörande. Den analyserar inte bara kommandoraden, utan tar bort alla alternativ som finns från argv. Detta är en viktig sak, det kommer bara att lämna listan över filer som levereras efter alternativen i argv.

instagram story viewer