Komandrindas opciju parsēšana rubīna veidā (OptionParser)

Alternatīva GetoptLong

Mākoņdatošanas galds

Džons Lambs/Digital Vision/Getty Images





Ruby ir aprīkots ar jaudīgu un elastīgu rīku, lai parsētu komandrindas opcijas, OptionParser. Kad iemācīsities to izmantot, jūs nekad vairs neatgriezīsities pie ARGV manuālas apskatīšanas. OptionParser ir vairākas funkcijas, kas padara to diezgan pievilcīgu Ruby programmētājiem. Ja kādreiz esat parsējis opcijas ar roku programmā Ruby vai C, vai ar iet ilgi C funkciju, redzēsit, cik apsveicamas ir dažas no šīm izmaiņām.

    OptionParser ir DRY .Skriptā vienreiz ir jāieraksta komandrindas slēdzis, tā argumenti, kods, kas jāpalaiž, kad tas tiek konstatēts, un komandrindas slēdža apraksts. OptionParser automātiski ģenerēs palīdzības ekrānus no šī apraksta, kā arī no tā apraksta secinās visu par argumentu. Piemēram, tas zinās --fails [FILE] opcija nav obligāta, un tai ir viens arguments. Turklāt tas to zinās --[-nav]-verbozs tiešām ir divas iespējas un pieņems abas formas. OptionParser automātiski konvertēs opcijas uz noteiktu klasi.Ja opcija izmanto veselu skaitli, tā var pārvērst jebkuru komandrindā nodoto virkni par veselu skaitli. Tas samazina dažus nogurumu, kas saistīts ar komandrindas opciju parsēšanu. Viss ir ļoti ietverts.Visas opcijas atrodas tajā pašā vietā, un opcijas efekts ir tieši blakus opcijas definīcijai. Ja opcijas ir jāpievieno, jāmaina vai kāds vienkārši vēlas redzēt, ko viņi dara, ir tikai viena vieta, kur meklēt. Kad komandrinda ir parsēta, rezultāti tiks glabāti vienā hash vai OpenStruct.

Pietiek jau, parādiet man kodu

Tātad, šeit ir vienkāršs lietošanas piemērs OptionParser . Tas neizmanto nevienu no uzlabotajām funkcijām, tikai pamatinformāciju. Ir trīs iespējas, un vienai no tām ir parametrs. Visas opcijas ir obligātas. Tur ir -v/--verbose un -q/--ātrs opcijas, kā arī -l/--logfile FILE opciju. Turklāt skripts ņem failu sarakstu neatkarīgi no opcijām.



|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|

Kodeksa pārbaude

Lai sāktu ar, optparse ir nepieciešama bibliotēka. Atcerieties, ka tas nav adārgakmens. Tas nāk ar Ruby, tāpēc nav nepieciešams instalēt dārgakmens vai pieprasīt rubīna dārgakmeņi pirms tam optparse .

Šajā skriptā ir divi interesanti objekti. Pirmais ir iespējas , norādīts visaugstākajā diapazonā. Tas ir vienkāršs tukšums hash . Kad opcijas ir definētas, tās ieraksta savas noklusējuma vērtības šajā jaucējkodā. Piemēram, noklusējuma darbība ir paredzēta šim skriptam esi runīgs, tātad opcijas[:verbose] ir iestatīts uz false. Kad komandrindā tiek atrastas opcijas, tās mainīs vērtības iespējas lai atspoguļotu to ietekmi. Piemēram, kad -v/--verbose tiek konstatēts, tas piešķirs patieso vērtību opcijas[:verbose] .



Otrs interesants objekts ir optparse . Tas ir OptionParser pats objekts. Kad jūs uzbūvējat šo objektu, jūs tam nododat bloku. Šis bloks tiek palaists izstrādes laikā, un tas izveidos opciju sarakstu iekšējās datu struktūrās un sagatavosies visu parsēt. Tieši šajā blokā notiek visa burvība. Šeit jūs definējat visas opcijas.

Opciju definēšana

Katra opcija atbilst vienam un tam pašam modelim. Vispirms jaucējkodā ierakstiet noklusējuma vērtību. Tas notiks, tiklīdz OptionParser ir uzbūvēts. Tālāk jūs zvanāt uz ieslēgts metodi , kas nosaka pašu opciju. Šai metodei ir vairākas formas, taču šeit tiek izmantota tikai viena. Citas veidlapas ļauj definēt automātiskas tipu konvertācijas un vērtību kopas, uz kurām opcija ir ierobežota. Šeit izmantotie trīs argumenti ir īsā forma, garā forma un opcijas apraksts.

The ieslēgts metode no garās formas secinās vairākas lietas. Viena lieta, ko var secināt, ir jebkuru parametru klātbūtne. Ja opcijā ir kādi parametri, tas nodos tos kā parametrus blokam.

Ja opcija ir sastopama komandrindā, bloks tiek nodots ieslēgts metode tiek palaists. Šeit bloki nedara daudz, tie tikai nosaka vērtības opciju hash. Varētu darīt vairāk, piemēram, pārbaudīt, vai fails, uz kuru ir norādīts, eksistē utt. Ja ir kādas kļūdas, no šiem blokiem var tikt pieļauti izņēmumi.



Visbeidzot, komandrinda tiek parsēta. Tas notiek, zvanot uz parsēt! metode uz an OptionParser objektu. Patiesībā ir divas šīs metodes formas, parsēt un parsēt! . Kā norāda versija ar izsaukuma zīmi, tā ir destruktīva. Tas ne tikai parsē komandrindu, bet arī noņems visas atrastās opcijas ARGV . Tas ir svarīgi, jo pēc opcijām tiks atstāts tikai to failu saraksts ARGV .