Opcije naredbenog retka OptionParser na način Ruby

click fraud protection

Ruby dolazi opremljen snažnim i fleksibilnim alatom za analizu opcija naredbenog retka, OptionParser. Jednom kada naučite kako to koristiti, više se nećete vratiti na ARGV ručno. OptionParser ima nekoliko značajki koje ga čine privlačnim za Ruby programere. Ako ste ikada ručno analizirali opcije u Ruby ili C ili s getoptlong C funkcija, vidjet ćete koliko su neke od ovih promjena dobrodošle.

  • OptionParser je SUHI. U skriptu morate samo jedanput napisati prekidač naredbenog retka, njegove argumente, kôd koji će se pokrenuti kad se nađe i opis prekidača naredbenog retka. OptionParser će za vas automatski generirati zaslone pomoći iz ovog opisa, kao i zaključiti o argumentima iz njegovog opisa. Na primjer, to će znati --file [FILE] opcija je neobavezna i traje jedan argument. Također, to će znati - [- nema] -verbose stvarno su dvije mogućnosti i prihvatit će oba oblika.
  • OptionParser će automatski pretvoriti opcije u određenu klasu. Ako opcija uzme cijeli broj, može pretvoriti bilo koji niz koji je poslan u naredbenoj liniji u cijeli broj. Time se smanjuje dio zamora koji je uključen u analizu opcija naredbenog retka.
    instagram viewer
  • Sve je vrlo sadržajno. Sve su opcije na istom mjestu, a učinak opcije je točno uz bok definiciji opcije. Ako se opcije moraju dodavati, mijenjati ili netko jednostavno želi vidjeti što rade, postoji samo jedno mjesto koje treba potražiti. Jednom kada se naredbena linija analizira, rezultati će zadržati jedan Hash ili OpenStruct.

Dovoljno već, pokaži mi neki kod

Dakle, evo jednostavnog primjera kako se koristi OptionParser. Ne koristi nijednu napredniju značajku, već samo osnove. Postoje tri mogućnosti, a jedna od njih uzima parametar. Sve su opcije obavezne. Tu su -v / - opširno i -q / - brzo opcijama, kao i -l / - logfile FILE opcija. Uz to, skripta uzima popis datoteka neovisnih o opcijama.

 #! / usr / bin / env rubin

 # Skripta koja će pretvarati veličinu određenog broja slika

 zahtijevati 'optparse'


 # Ovaj hash sadržavat će sve mogućnosti

 # raščlanjeno iz naredbenog retka

 # OptionParser.

 opcije = {}


 optparse = OptionParser.new do | opts |

 # Postavite natpis, prikazan na vrhu

 # zaslona pomoći.

 opts.banner = "Upotreba: optparse1.rb [opcije] file1 file2 ..."


 # Definirajte opcije i što oni rade

 opcije [: verbose] = netočno

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

 opcije [: verbose] = istina

 kraj


 opcije [: brzo] = netočno

 opts.on ('-q', '--quick', 'Izvršite zadatak brzo') učiniti

 opcije [: brzo] = istina

 kraj


 opcije [: logfile] = nil

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

 opcije [: logfile] = datoteka

 kraj


 # Ovo prikazuje zaslon pomoći, svi su programi

 # pretpostavlja se da ima ovu opciju.

 opts.on ('-h', '--help', 'Prikaži ovaj ekran')

 stavlja opts

 Izlaz

 kraj

 kraj


 # Analizirajte naredbeni redak. Zapamtite da postoje dva oblika

 # metode raščlanjivanja. Metoda 'raščlanjivanje' jednostavno analizira

 # ARGV, dok je 'raščlanjivanje!' metoda raščlanjuje ARGV i uklanja

 # bilo koje tamo pronađene opcije, kao i bilo koji parametar za

 # mogućnosti. Preostalo je popis datoteka za promjenu veličine.

 optparse.parse!


 stavlja "Biti verbose" ako opcije [: verbose]

 stavlja "Biti brz" ako opcije [: brzo]

 stavlja "Logging to file # {options [: logfile]}" ako opcije [: logfile]


 ARGV.each do | f |

 stavlja "Promjena veličine slike # {f} ..."

 spavati 0,5

 kraj

Ispitivanje Kodeksa

Za početak, the optparse potrebna je knjižnica. Zapamtite, ovo nije dragulj. Dolazi s Rubyjem, tako da nema potrebe instalirati dragulj ili zahtijevati rubygems prije optparse.

U ovom scenariju postoje dva zanimljiva predmeta. Prva je opcije, proglašen vrhunskim opsegom. Jednostavno prazno paprikaš. Kad su opcije definirane, u taj hash upisuju svoje zadane vrijednosti. Na primjer, zadano ponašanje je za ovu skriptu ne biti višeznačan, dakle Mogućnosti [: opširno] je postavljeno na false. Kada se u naredbenom retku nađu opcije, promijenit će se vrijednosti u opcije da odrazi njihov učinak. Na primjer, kada -v / - opširno naiđe na to, dodijelit će joj true Mogućnosti [: opširno].

Drugi je zanimljiv objekt optparse. Ovo je OptionParser sam objekt. Kad konstruirate ovaj objekt, prosljeđujete ga bloku. Ovaj se blok pokreće tijekom izrade i sastavit će popis opcija u unutarnjim strukturama podataka i pripremite se za sve raščlanjivanje. Upravo se u tom bloku događa sva čarolija. Ovdje definirate sve mogućnosti.

Definiranje opcija

Svaka opcija slijedi isti obrazac. Najprije upišete zadanu vrijednost u hash. To će se dogoditi čim OptionParser konstruira se. Slijedeće, zovete nanačin, koja definira samu opciju. Postoji nekoliko oblika ove metode, ali ovdje se koristi samo jedan. Ostali obrasci omogućuju vam definiranje automatskog pretvorbe tipa i skupa vrijednosti na koje je opcija ograničena. Tri ovdje korištena argumenta su kratki oblik, dugi oblik i opis opcije.

na metoda će zaključiti niz stvari iz dugog oblika. Jedna stvar je da će zaključiti postojanje bilo kakvih parametara. Ako postoje neki parametri na opciji, ona će ih proslijediti kao parametre bloku.

Ako se u naredbenoj liniji nađe opcija, blok je prešao na na metoda se vodi. Ovdje se blokovi ne bave puno, već samo postavljaju vrijednosti u hash-u opcija. Moglo bi se učiniti više, poput provjere da postojeća datoteka postoji, itd. Ako postoje pogreške, iznimke se mogu izbaciti iz ovih blokova.

Napokon, naredbena linija je raščlanjena. To se događa pozivom na analizirati! metoda na an OptionParser objekt. Postoje zapravo dva oblika ove metode, raščlanjivanja i analizirati!. Kao što inačica s uskličnikom podrazumijeva, destruktivna je. Ne samo da analizira naredbenu liniju, već će ukloniti i sve moguće opcije argv. Ovo je važna stvar, ostat će samo popis datoteka isporučenih nakon opcija u argv.

instagram story viewer