Używanie OptionParser do analizowania poleceń w Ruby
TongRo Images/Getty Images
w artykuł omawiający funkcje OptionParser omówiliśmy niektóre powody, dla których korzystanie z OptionParser w Rubin lepsze niż ręczne przeglądanie ARGV w celu przeanalizowania polecenia ręcznie. Teraz nadszedł czas, aby przejść do nauki korzystania z OptionParser i jego funkcji.
Poniższy kod wzorcowy zostanie użyty we wszystkich przykładach w tym samouczku. Aby wypróbować którykolwiek z przykładów, po prostu umieść przykład opts.on blok obok komentarza TODO. Uruchomienie programu spowoduje wydrukowanie stanu opcji ma i ARGV, co pozwoli ci zbadać efekty twoich przełączników.
#!/usr/bin/env ruby
wymagaj 'optparse'
wymagaj 'pp'
# Ten skrót będzie zawierał wszystkie opcje
# parsowane z wiersza poleceń przez
# OptionParser.
opcje = {}
optparse = OptionParser.new do|opts|
# DO ZROBIENIA: Umieść tutaj opcje wiersza poleceń
# Wyświetla ekran pomocy, wszystkie programy są
# zakłada się, że ma tę opcję.
opts.on( '-h', '--help', 'Wyświetl ten ekran' ) do
stawia opts
Wyjście
koniec
koniec
# Przeanalizuj wiersz poleceń. Pamiętaj, że istnieją dwie formy
# metody analizy. Metoda „parse” po prostu analizuje
# ARGV, podczas gdy 'parsuje!' metoda analizuje ARGV i usuwa
# wszelkie znalezione tam opcje, a także wszelkie parametry dla
# opcje. Pozostała lista plików do zmiany rozmiaru.
optparse.parse!
pp 'Opcje:', opcje
pp „ARGV:”, ARGV
Prosty przełącznik
Prosty przełącznik to argument bez opcjonalnych formularzy lub parametrów. Efektem będzie po prostu ustawienie flagi w opcjach haszysz . Żadne inne parametry nie zostaną przekazane do na metoda.
opcje[:proste] = fałsz
opts.on( '-s', '--simple', 'Prosty argument' ) wykonaj
opcje[:proste] = prawda
koniec
Przełącznik z parametrem obowiązkowym
Przełączniki, które przyjmują parametr, muszą jedynie podać nazwę parametru w długiej formie przełącznika. Na przykład, '-f', '--plik PLIK' oznacza, że przełącznik -f lub --file przyjmuje pojedynczy parametr o nazwie PLIK, a ten parametr jest obowiązkowy. Nie możesz użyć opcji -f lub --file bez przekazania jej parametru.
opcje[:mand] = ''
opts.on( '-m', '--obowiązkowy PLIK', 'Argument obowiązkowy' ) do|f|
opcje[:mand] = f
koniec
Przełącznik z parametrem opcjonalnym
Parametry przełącznika nie muszą być obowiązkowe, mogą być opcjonalne. Aby zadeklarować parametr przełącznika jako opcjonalny, należy umieścić jego nazwę w nawiasie w opisie przełącznika. Na przykład, '--logfile [PLIK]' oznacza, że parametr FILE jest opcjonalny. Jeśli nie zostanie podany, program przyjmie rozsądną wartość domyślną, taką jak plik o nazwie log.txt.
W przykładzie idiom a = b || c jest używany. To tylko skrót dla „a = b, ale jeśli b jest fałszywe lub zero, a = c”.
opcje[:opt] = fałsz
opts.on( '-o', '--opcjonalne [OPCJA]', 'Argument opcjonalny' ) do|f|
opcje[:opt] = f || 'nic'
koniec
Automatycznie konwertuj na Float
OptionParser może automatycznie konwertować argument na niektóre typy. Jednym z tych typów jest Float. Aby automatycznie przekonwertować argumenty na przełącznik na Float, przekaż Float do na Metoda po ciągach opisu przełącznika.
Automatyczne konwersje są przydatne. Nie tylko oszczędzają krok konwersji ciągu do pożądanego typu, ale także sprawdzają format i wyrzucają wyjątek, jeśli jest niepoprawnie sformatowany.
opcje[:zmiennoprzecinkowa] = 0,0
opts.on( '-f', '--float NUM', Float, 'Konwertuj na float' ) do|f|
opcje[:float] = f
koniec
Niektóre inne typy, które OptionParser może automatycznie przekonwertować, obejmują czas i liczbę całkowitą.
Listy argumentów
Argumenty można interpretować jako listy. Można to uznać za konwersję na tablicę, gdy konwertujesz na zmiennoprzecinkową. Podczas gdy łańcuch opcji może zdefiniować parametr, który ma być nazywany 'a,b,c', OptionParser ślepo zezwala na dowolną liczbę elementów na liście. Jeśli więc potrzebujesz określonej liczby elementów, sam sprawdź długość tablicy.
opcje[:lista] = []
opts.on( '-l', '--list a,b,c', Tablica, 'Lista parametrów' ) do|l|
opcje[:lista] = l
koniec
Zestaw argumentów
Czasami warto ograniczyć argumenty do kilku wyborów. Na przykład poniższy przełącznik przyjmie tylko jeden obowiązkowy parametr, a parametr musi być jednym z tak , Nie lub być może . Jeśli parametr jest w ogóle czymś innym, zostanie zgłoszony wyjątek.
Aby to zrobić, przekaż listę dopuszczalnych parametrów jako symbole po ciągach opisu przełącznika.
opcje[:ustaw] = :tak
opts.on( '-s', '--set OPT', [:yes, :no, :może], 'Parametry ze zbioru' ) do|s|
opcje[:zestaw] = s
koniec
Zanegowane formularze
Przełączniki mogą mieć formę zanegowaną. Przełącznik --negacja może mieć taki, który ma odwrotny skutek, zwany --nie-zanegowane . Aby to opisać w ciągu opisu przełącznika, umieść alternatywną część w nawiasach: --[nie-]zanegowane . W przypadku napotkania pierwszej formy do bloku zostanie przekazana prawda, a w przypadku napotkania drugiej formy zostanie zablokowana fałsz.
opcje[:neg] = fałsz
opts.on( '-n', '--[nie-]zanegowane', 'Zanegowane formularze' ) do|n|
opcje[:neg] = n
koniec