Opțiunea liniei de comandă OptionParser Opțiunea Ruby Way

Ruby vine echipat cu un instrument puternic și flexibil pentru a analiza opțiunile din linia de comandă, OptionParser. După ce înveți cum să folosești acest lucru, nu te vei întoarce niciodată cu ajutorul ARGV manual. OptionParser are o serie de funcții care îl fac destul de atrăgător pentru programatorii Ruby. Dacă ați analizat vreodată opțiunile de mână în Ruby sau C sau cu getoptlong Funcția C, veți vedea cât de binevenite sunt unele dintre aceste modificări.

  • OptionParser este USCAT. Trebuie doar să scrieți comutatorul de linie de comandă, argumentele sale, codul care va fi rulat atunci când este întâlnit și descrierea comutatorului liniei de comandă o singură dată în scriptul dvs. OptionParser va genera automat ecrane de ajutor din această descriere, precum și deduce totul despre argument din descrierea sa. De exemplu, va ști - fișier [FILE] opțiunea este opțională și are un singur argument. De asemenea, va ști asta - [- no] -verbose este cu adevărat două opțiuni și va accepta ambele forme.
  • instagram viewer
  • OptionParser va converti automat opțiunile într-o anumită clasă. Dacă opțiunea ia un număr întreg, poate converti orice șir transmis pe linia de comandă într-un număr întreg. Aceasta reduce o parte din tediul implicat în analizarea opțiunilor din linia de comandă.
  • Totul este foarte conținut. Toate opțiunile sunt în același loc, iar efectul opțiunii este chiar de-a lungul definiției pentru opțiune. Dacă opțiunile trebuie adăugate, schimbate sau cineva pur și simplu vrea să vadă ce face, există un singur loc în care să se uite. După ce linia de comandă este analizată, un singur Hash sau OpenStruct va păstra rezultatele.

Destul de mult, arată-mi ceva cod

Iată un exemplu simplu de utilizare OptionParser. Nu folosește nicio caracteristică avansată, ci doar elementele de bază. Există trei opțiuni, iar una dintre ele ia un parametru. Toate opțiunile sunt obligatorii. Există -v / - verbose și -q / - rapid opțiuni, precum și -l / - fișier de fișier opțiune. În plus, scriptul ia o listă de fișiere independente de opțiuni.

 #! / usr / bin / env ruby

 # Un script care se va preface redimensionarea unui număr de imagini

 necesită „optparse”


 # Acest hash va conține toate opțiunile

 # parsed de la linia de comandă de

 # OptionParser.

 options = {}


 optparse = OptionParser.new face | optează |

 # Setați un banner, afișat în partea de sus

 # a ecranului de ajutor.

 opts.banner = "Utilizare: optparse1.rb [opțiuni] file1 file2 ..."


 # Definiți opțiunile și ce fac

 options [: verbose] = false

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

 options [: verbose] = true

 Sfârșit


 options [: rapid] = false

 opts.on ('-q', '--quick', 'Realizați sarcina rapid') faceți

 options [: rapid] = true

 Sfârșit


 options [: logfile] = nil

 opts.on ('-l', '--logfile FILE', 'Scrieți jurnalul în FILE') do | fișier |

 options [: logfile] = fișier

 Sfârșit


 # Acesta afișează ecranul de ajutor, toate programele sunt

 # presupus că are această opțiune.

 opts.on ('-h', '--help', 'Afișează acest ecran')

 pune opțiuni

 Ieșire

 Sfârșit

 Sfârșit


 # Analizați linia de comandă. Amintiți-vă că există două forme

 # a metodei parse. Metoda „parse” pur și simplu analizează

 # ARGV, în timp ce „parse!” metoda analizează ARGV și elimină

 # orice opțiuni găsite acolo, precum și orice parametri pentru

 # opțiunile. Ceea ce a mai rămas este lista de fișiere de redimensionat.

 optparse.parse!


 pune „A fi verbos” dacă opțiuni [: verbose]

 pune „A fi rapid” dacă opțiunile [: rapid]

 pune „Logging to file # {options [: logfile]}” if options [: logfile]


 ARGV.each do | f |

 pune „Redimensionarea imaginii # {f} ...”

 somn 0,5

 Sfârșit

Examinând Codul

Pentru a începe cu, optparse biblioteca este necesară. Nu uitați, acesta nu este un bijuterie. Vine cu Ruby, deci nu este nevoie să instalați o bijuterie sau să solicitați rubygems inainte de optparse.

În acest script există două obiecte interesante. Primul este Opțiuni, declarat la cel mai înalt domeniu de aplicare. Este un simplu gol hașiș. Când sunt definite opțiunile, acestea își scriu valorile implicite în acest hash. De exemplu, comportamentul implicit este pentru acest script nu fiți verbose, deci opțiuni [: verbose] este setat pe fals. Când opțiunile sunt întâlnite pe linia de comandă, acestea vor schimba valorile în Opțiuni să reflecte efectul lor. De exemplu, când -v / - verbose este întâlnit, acesta va atribui true la opțiuni [: verbose].

Al doilea obiect interesant este optparse. Acesta este OptionParser obiectul în sine. Când construiți acest obiect, îl transmiteți un bloc. Acest bloc este rulat în timpul construcției și va construi o listă de opțiuni în structurile de date interne și va fi gata să analizeze totul. În acest bloc se întâmplă toată magia. Definiți toate opțiunile aici.

Definirea opțiunilor

Fiecare opțiune urmează același tipar. Mai întâi scrieți valoarea implicită în hash. Acest lucru se va întâmpla imediat ce OptionParser este construit. În continuare, apelați pemetodă, care definește opțiunea în sine. Există mai multe forme ale acestei metode, dar aici se folosește doar una. Celelalte forme vă permit să definiți conversii automate de tip și seturi de valori la care este restricționată o opțiune. Cele trei argumente utilizate aici sunt forma scurtă, forma lungă și descrierea opțiunii.

pe metoda va deduce o serie de lucruri din forma lungă. Un lucru este să deducem este prezența oricăror parametri. Dacă există parametri prezenți în opțiune, îi va trece ca parametri la bloc.

Dacă opțiunea este întâlnită pe linia de comandă, blocul a trecut la pe metoda este rulată. Aici, blocurile nu fac mare lucru, doar setează valori în hash-ul de opțiuni. S-ar putea face mai multe, cum ar fi verificarea existenței unui fișier la care se face referire etc. Dacă există erori, pot fi aruncate excepții de la aceste blocuri.

În cele din urmă, linia de comandă este analizată. Acest lucru se întâmplă prin apelarea analiza! metoda de pe un OptionParser obiect. Există de fapt două forme ale acestei metode, analiza și analiza!. După cum implică versiunea cu punctul de exclamare, aceasta este distructivă. Nu numai că analizează linia de comandă, dar va elimina orice opțiuni găsite argv. Acest lucru este important, acesta va lăsa doar lista de fișiere furnizate după opțiunile din argv.

instagram story viewer