Parsowanie opcji wiersza poleceń w sposób Ruby (OptionParser)

Alternatywa dla GetoptLong

Biurko do przetwarzania w chmurze

John Lamb/Digital Vision/Getty Images





Ruby jest wyposażony w potężne i elastyczne narzędzie do analizowania opcji wiersza poleceń, OptionParser. Kiedy nauczysz się tego używać, nigdy nie wrócisz do ręcznego przeglądania ARGV. OptionParser ma wiele funkcji, które czynią go atrakcyjnym dla programistów Rubiego. Jeśli kiedykolwiek analizowałeś opcje ręcznie w Ruby lub C, lub za pomocą getoptlong Funkcja C, zobaczysz, jak mile widziane są niektóre z tych zmian.

    OptionParser to SUCHY .Wystarczy w skrypcie napisać przełącznik wiersza polecenia, jego argumenty, kod do uruchomienia, gdy zostanie napotkany, oraz opis przełącznika wiersza polecenia. OptionParser automatycznie wygeneruje dla Ciebie ekrany pomocy na podstawie tego opisu, a także wywnioskuje wszystko na temat argumentu z jego opisu. Na przykład będzie wiedział, że --plik [PLIK] opcja jest opcjonalna i przyjmuje pojedynczy argument. Będzie też wiedział, że --[-nie]-gadatliwy to tak naprawdę dwie opcje i zaakceptuje obie formy. OptionParser automatycznie przekonwertuje opcje do określonej klasy.Jeśli opcja przyjmuje liczbę całkowitą, może przekonwertować dowolny ciąg przekazany w wierszu poleceń na liczbę całkowitą. Zmniejsza to niektóre z nudów związanych z analizowaniem opcji wiersza poleceń. Wszystko jest bardzo ograniczone.Wszystkie opcje znajdują się w tym samym miejscu, a efekt opcji znajduje się tuż obok definicji opcji. Jeśli trzeba dodać, zmienić opcje lub ktoś po prostu chce zobaczyć, co robią, jest tylko jedno miejsce, w którym można zajrzeć. Po przeanalizowaniu wiersza polecenia pojedynczy skrót lub OpenStruct będzie zawierał wyniki.

Już wystarczy, pokaż mi trochę kodu

Oto prosty przykład, jak używać Parser opcji . Nie używa żadnych zaawansowanych funkcji, tylko podstawy. Istnieją trzy opcje, a jedna z nich przyjmuje parametr. Wszystkie opcje są obowiązkowe. Są -v/--gadatliwy oraz -q/--szybko opcje, a także -l/--logfile PLIK opcja. Dodatkowo skrypt pobiera listę plików niezależnie od opcji.



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

Badanie Kodeksu

Na początek optparse biblioteka jest wymagana. Pamiętaj, to nie jestklejnot. Jest dostarczany z Ruby, więc nie ma potrzeby instalowania klejnotu ani wymagania klejnoty rubinowe zanim optparse .

W tym skrypcie są dwa interesujące obiekty. Pierwszy to opcje , zadeklarowany w najwyższym zakresie. To proste puste haszysz . Gdy opcje są zdefiniowane, zapisują swoje domyślne wartości w tym hashu. Na przykład domyślnym zachowaniem tego skryptu jest: nie bądź gadatliwy, więc opcje[:pełne] jest ustawiona na fałsz. Gdy w wierszu poleceń pojawią się opcje, zmienią one wartości w opcje odzwierciedlać ich efekt. Na przykład, kiedy -v/--gadatliwy zostanie napotkany, przypisze true do opcje[:pełne] .



Drugim interesującym obiektem jest optparse . To jest Parser opcji sam obiekt. Kiedy konstruujesz ten obiekt, przekazujesz mu blok. Ten blok jest uruchamiany podczas budowy i zbuduje listę opcji w wewnętrznych strukturach danych i przygotuje się do przeanalizowania wszystkiego. To w tym bloku dzieje się cała magia. Tutaj definiujesz wszystkie opcje.

Definiowanie opcji

Każda opcja ma ten sam wzór. Najpierw wpisujesz domyślną wartość do hasza. Stanie się to tak szybko, jak Parser opcji Jest zbudowany. Następnie dzwonisz do na metoda , który definiuje samą opcję. Istnieje kilka form tej metody, ale tutaj stosowana jest tylko jedna. Inne formularze pozwalają zdefiniować automatyczne konwersje typów i zestawy wartości, do których opcja jest ograniczona. Trzy argumenty użyte tutaj to krótka forma, długa forma i opis opcji.

The na Metoda wywnioskuje wiele rzeczy z długiej formy. Jedno, co wywnioskuje, to obecność jakichkolwiek parametrów. Jeśli w opcji są jakieś parametry, przekaże je jako parametry do bloku.

Jeśli opcja zostanie napotkana w wierszu poleceń, blok zostanie przekazany do na metoda jest uruchamiana. Tutaj bloki niewiele robią, po prostu ustawiają wartości w hashu opcji. Można zrobić więcej, na przykład sprawdzić, czy plik, do którego się odwołuje, istnieje itp. W przypadku wystąpienia błędów można wyrzucić wyjątki z tych bloków.



Na koniec linia poleceń jest analizowana. Dzieje się to przez wywołanie analizować! metoda na an Parser opcji obiekt. W rzeczywistości istnieją dwie formy tej metody, analizować oraz analizować! . Jak sugeruje wersja z wykrzyknikiem, jest destrukcyjna. Nie tylko analizuje wiersz poleceń, ale usuwa wszystkie znalezione opcje z ARGV . To ważna rzecz, zostawi tylko listę plików dostarczonych po opcjach w ARGV .