OptionParser Opcje wiersza polecenia Ruby Way

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

  • OptionParser to SUCHY. Musisz tylko napisać przełącznik wiersza polecenia, jego argumenty, kod, który ma zostać uruchomiony, gdy zostanie napotkany, i opis przełącznika wiersza polecenia tylko raz w skrypcie. OptionParser automatycznie wygeneruje dla ciebie ekrany pomocy z tego opisu, a także wyciągnie wnioski na temat argumentu z jego opisu. Na przykład będzie wiedział --plik [PLIK] opcja jest opcjonalna i przyjmuje pojedynczy argument. Będzie to również wiedzieć - [- nie] -verbose to tak naprawdę dwie opcje i zaakceptuje obie formy.
  • OptionParser automatycznie przekonwertuje opcje na określoną klasę.
    instagram viewer
    Jeśli opcja przyjmuje liczbę całkowitą, może konwertować dowolny ciąg przekazany w wierszu polecenia na liczbę całkowitą. Ogranicza to część nudy związanej 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 opcje muszą zostać dodane, zmienione lub ktoś po prostu chce zobaczyć, co robią, jest tylko jedno miejsce do obejrzenia. Po przeanalizowaniu wiersza polecenia pojedynczy skrót lub OpenStruct przechowa wyniki.

Wystarczy już, pokaż mi kod

Oto prosty przykład użycia OptionParser. Nie wykorzystuje żadnych zaawansowanych funkcji, tylko podstawy. Istnieją trzy opcje, a jedna z nich przyjmuje parametr. Wszystkie opcje są obowiązkowe. Istnieją -v / - pełne i -q / - szybko opcje, a także -l / - PLIK pliku dziennika opcja. Ponadto skrypt pobiera listę plików niezależnie od opcji.

 #! / usr / bin / env ruby

 # Skrypt, który będzie udawał, że zmienia rozmiar wielu zdjęć

 wymagają „optparse”


 # Ten skrót zawiera wszystkie opcje

 # parsowane z wiersza poleceń przez

 # OptionParser.

 opcje = {}


 optparse = OptionParser.new do | opts |

 # Ustaw baner wyświetlany na górze

 # ekranu pomocy.

 opts.banner = "Zastosowanie: optparse1.rb [opcje] plik1 plik2 ..."


 # Zdefiniuj opcje i co robią

 options [: verbose] = false

 opts.on („-v”, „--verbose”, „Output more information”) zrobić

 options [: verbose] = true

 koniec


 opcje [: szybkie] = fałsz

 opts.on („-q”, „--quick”, „Wykonaj zadanie szybko”) wykonaj

 opcje [: szybkie] = prawda

 koniec


 options [: logfile] = zero

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

 options [: logfile] = plik

 koniec


 # Wyświetla ekran pomocy, wszystkie programy są

 # zakłada, że ​​ma tę opcję.

 opts.on („-h”, „--help”, „Display this screen”) zrobić

 stawia opts

 wyjście

 koniec

 koniec


 # Analizuj wiersz poleceń. Pamiętaj, że są dwie formy

 # metody analizy. Metoda „parsuj” po prostu parsuje

 # ARGV, podczas gdy „parsowanie!” 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!


 wstawia „Be verbose”, jeśli opcje [: verbose]

 wstawia „Być szybkim”, jeśli opcje [: szybkie]

 wstawia „Logowanie do pliku # {options [: logfile]}”, jeśli options [: logfile]


 ARGV.each do | f |

 wstawia „Zmiana rozmiaru obrazu nr {f} ...”

 spać 0,5

 koniec

Badanie Kodeksu

Na początek, optparse biblioteka jest wymagana. Pamiętaj, że to nie jest klejnot. Jest dostarczany z Ruby, więc nie trzeba instalować klejnotu ani wymagać rubygemy przed optparse.

W tym skrypcie znajdują się dwa interesujące obiekty. Pierwszy to opcje, zadeklarowany w najwyższym zakresie. To jest po prostu puste haszysz. Po zdefiniowaniu opcji zapisują wartości domyślne w tym haszu. Na przykład domyślne zachowanie jest dla tego skryptu nie bądź gadatliwy, więc opcje [: pełne] ma wartość false. Gdy w wierszu poleceń pojawią się opcje, zmienią one wartości w opcje odzwierciedlać ich efekt. Na przykład kiedy -v / - pełne napotkany, przypisze true do opcje [: pełne].

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

Definiowanie opcji

Każda opcja ma ten sam wzór. Najpierw zapisz wartość domyślną w haszu. Stanie się tak szybko, jak OptionParser Jest skonstruowany. Następnie dzwonisz nametoda, który określa samą opcję. Istnieje kilka form tej metody, ale tutaj stosowana jest tylko jedna. Pozostałe formularze pozwalają definiować automatyczne konwersje typów i zestawy wartości, do których ograniczona jest opcja. Trzy użyte tutaj argumenty to krótka forma, długa forma i opis opcji.

The na metoda wywnioskuje wiele rzeczy z długiej formy. Jedną rzeczą jest to, że można wywnioskować, 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 polecenia, blok zostanie przekazany do na metoda jest uruchomiona. Tutaj bloki niewiele robią, po prostu ustawiają wartości w skrócie opcji. Można zrobić więcej, na przykład sprawdzając, czy plik, o którym mowa, istnieje itp. Jeśli wystąpią jakieś błędy, z tych bloków można wyrzucić wyjątki.

Na koniec parsowany jest wiersz poleceń. Dzieje się tak, dzwoniąc na numer analizować! metoda na OptionParser obiekt. Istnieją dwie formy tej metody, analizować i analizować!. Jak sugeruje wersja z wykrzyknikiem, jest destrukcyjna. Nie tylko analizuje wiersz poleceń, ale usuwa wszelkie znalezione opcje ARGV. Jest to ważna rzecz, pozostawi tylko listę plików dostarczonych po opcjach w ARGV.