OptionParser Príkazový riadok Možnosti Ruby Way

Ruby prichádza vybavené výkonným a flexibilným nástrojom na analýzu možností príkazového riadku, OptionParser. Akonáhle sa naučíte, ako to používať, už sa nikdy nevrátite k prezeraniu ARGV ručne. OptionParser má množstvo funkcií, vďaka ktorým je celkom príťažlivý pre programátorov Ruby. Ak ste niekedy analyzovali možnosti ručne v Ruby alebo C alebo s getoptlong Funkcia C, uvidíte, aké sú vítané niektoré z týchto zmien.

  • OptionParser je DRY. Prepínač príkazového riadku, jeho argumenty, kód, ktorý sa má spustiť, keď sa vyskytne, a popis prepínača príkazového riadku musíte napísať iba raz v skripte. OptionParser pre vás automaticky vygeneruje obrazovky pomoci z tohto popisu a z jeho popisu odvodí všetko o argumente. Napríklad bude poznať --file [FILE] voľba je voliteľná a má jediný argument. Bude to tiež vedieť - [- no] -verbose sú skutočne dve možnosti a budú akceptovať obidve formy.
  • OptionParser automaticky prevedie voľby na konkrétnu triedu. Ak voľba trvá celé číslo, môže prevádzať ľubovoľný reťazec odovzdaný na príkazovom riadku na celé číslo. To obmedzuje niektoré z tedia zapojeného do analýzy možností príkazového riadku.
    instagram viewer
  • Všetko je veľmi obsiahnuté. Všetky možnosti sú na rovnakom mieste a účinok možnosti je hneď vedľa definície možnosti. Ak je potrebné pridať, zmeniť alebo ak niekto jednoducho chce vidieť, čo robí, musí sa pozrieť iba na jedno miesto. Akonáhle je príkazový riadok analyzovaný, výsledky Hash alebo OpenStruct budú mať výsledky.

Už dosť, ukážte mi nejaký kód

Tu je jednoduchý príklad použitia OptionParser. Nepoužíva žiadne pokročilé funkcie, iba základy. Existujú tri možnosti a jedna z nich má parameter. Všetky možnosti sú povinné. Existujú -v / - verbose a -q / - rýchla možnosti, ako aj -l / - logfile SÚBOR voľba. Skript navyše berie zoznam súborov nezávislých od možností.

 #! / usr / bin / env ruby

 # Skript, ktorý bude predstierať, že zmení veľkosť obrázka

 vyžadovať 'optparse'


 # Toto hash bude obsahovať všetky možnosti

 # analyzované z príkazového riadku

 # OptionParser.

 options = {}


 optparse = OptionParser.new do | opts |

 # Nastavte banner, zobrazený v hornej časti

 # obrazovky pomocníka.

 opts.banner = "Použitie: optparse1.rb [možnosti] file1 file2 ..."


 # Definujte možnosti a čo robia

 options [: verbose] = false

 opts.on ('-v', '--verbose', 'Output more information') do

 options [: verbose] = true

 koniec


 options [: quick] = false

 opts.on ('-q', '--quick', 'Vykonajte úlohu rýchlo')

 options [: quick] = true

 koniec


 možnosti [: logfile] = nula

 opts.on ('-l', '--logfile FILE', 'Write log to FILE') do | file |

 options [: logfile] = file

 koniec


 # Zobrazí sa obrazovka pomocníka, všetky programy sú

 # predpokladá sa, že má túto možnosť.

 opts.on ('-h', '--help', 'Display this screen')

 dáva voliť

 východ

 koniec

 koniec


 # Analyzovať príkazový riadok. Pamätajte, že existujú dve formy

 # metódy analýzy. Metóda „parse“ jednoducho analyzuje

 # ARGV, zatiaľ čo „parse!“ metóda analyzuje ARGV a odstraňuje

 # všetky nájdené možnosti, ako aj všetky parametre pre

 # možnosti. Zostáva zoznam súborov na zmenu veľkosti.

 optparse.parse!


 ak je to možné, dáva možnosť „Byť podrobný“ [: podrobný]

 ak je to možné, dáva možnosť „Byť rýchla“ [: rýchla]

 vloží "Protokolovanie do súboru # {options [: logfile]}", ak možnosti [: logfile]


 ARGV.each do | f |

 vloží text „Zmena veľkosti obrázka # {f} ...“

 spánok 0,5

 koniec

Preskúmanie kódexu

Ak chcete začať s, optparse knižnica je povinná. Pamätajte, že to nie je klenot. Dodáva sa s Ruby, takže nemusíte inštalovať drahokam ani vyžadovať RubyGems pred optparse.

V tomto skripte sú dva zaujímavé objekty. Prvý z nich je možnosti, vyhlásené za najvyšší rozsah. Je to jednoduché prázdne hašiš. Ak sú definované možnosti, zapíšu do tohto hash svoje predvolené hodnoty. Napríklad predvolené správanie tohto skriptu je nie byť výrečný, tak Možnosti [: podrobného] je nastavená na false. Keď sa vyskytnú voľby na príkazovom riadku, zmenia hodnoty v možnosti aby odrážali ich účinok. Napríklad, keď -v / - verbose sa stretne, priradí to true Možnosti [: podrobného].

Druhým zaujímavým objektom je optparse. To je OptionParser sám objekt. Keď postavíte tento objekt, odovzdáte mu blok. Tento blok je spustený počas výstavby a vytvorí zoznam možností v interných dátových štruktúrach a pripraví sa na rozbor všetkého. V tomto bloku sa odohráva všetka mágia. Tu definujete všetky možnosti.

Definovanie možností

Každá možnosť má rovnaký vzor. Najprv napíšete predvolenú hodnotu do hash. Stane sa to hneď po OptionParser je skonštruovaný. Ďalej zavoláte nametóda, ktorý definuje samotnú možnosť. Existuje niekoľko foriem tejto metódy, ale tu sa používa iba jedna. Ostatné formuláre umožňujú definovať automatické prevody typov a množiny hodnôt, na ktoré je voľba obmedzená. Tri použité argumenty sú krátka forma, dlhá forma a popis možnosti.

na metóda vyvodí množstvo vecí z dlhej formy. Jedna vec je odvodiť, je prítomnosť akýchkoľvek parametrov. Ak sú vo voľbe prítomné nejaké parametre, odovzdá ich ako parametre do bloku.

Ak sa táto voľba objaví na príkazovom riadku, blok prešiel do na metóda je spustená. Bloky tu nerobia veľa, len nastavujú hodnoty v možnostiach hash. Mohlo by sa urobiť viac, ako je kontrola existencie uvedeného súboru atď. Ak sa vyskytnú nejaké chyby, môžu sa z týchto blokov vyhodiť výnimky.

Nakoniec sa analyzuje príkazový riadok. To sa deje volaním analyzovať! metóda na OptionParser objekt. V skutočnosti existujú dve formy tejto metódy, parse a analyzovať!. Ako naznačuje verzia s výkričníkom, je deštruktívna. Nielenže analyzuje príkazový riadok, ale odstráni aj všetky nájdené možnosti argv. Toto je dôležitá vec, ponechá iba zoznam súborov dodaných po voľbách v systéme Windows argv.