Jak używać ArgParse do parsowania parametrów skryptów Python
- 1785
- 293
- Laura Zygmunt
Cel
Naucz się używać modułu ArgParse, aby łatwo przeanalizować parametry skryptów Python
Wymagania
- Podstawowa znajomość pojęć Pythona i obiektowego
Trudność
ŁATWY
Konwencje
- # - Wymaga podanych poleceń Linuksa, które można wykonać z uprawnieniami root
bezpośrednio jako użytkownik root lub za pomocąsudo
Komenda - $ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny
Wstęp
W poprzednim artykule widzieliśmy, jak parsować argumenty wiersza poleceń za pomocą getopts w kontekście skryptów bash (można znaleźć artykuł tutaj). Teraz zobaczymy, jak wykonać to samo zadanie, w silniejszy sposób, pisząc skrypt Python.
Zainicjuj parser
Aby osiągnąć nasz cel, użyjemy modułu Python o nazwie Argparse
. Pozwoli nam określić nasze parametry wiersza poleceń i automatycznie wygeneruje na ich temat komunikat pomocy w skrypcie. Zacznijmy więc, nazwiemy nasz skrypt „PrinterScript.py ”:
#!/usr/bin/env python import argparse Jeśli __name__ == '__main__': # zainicjuj parser parser = argparse.ArgumentParser (opis = „Prosty skrypt do wykazania użycia argParse”)
Kopiuj Pierwszą rzeczą do zrobienia jest oczywiście import Argparse
moduł. Następnie przystąpimy do inicjowania parsera. opis
Słowo kluczowe, przekazane do konstruktora parsera jest opcjonalne, ale pozwala nam dodać krótki opis skryptu, gdy wyświetlany jest komunikat pomocy.
Istnieją inne słowa kluczowe, których możemy użyć do dalszego dostosowania zachowania parsera: na przykład dostarczanie epilog
Słowo kluczowe możemy podać tekst, który ma być wyświetlany po głównym komunikacie pomocy lub za pomocą używania wałówka
Możemy określić nazwę programu, która ma być wyświetlona w tym samym kontekście (domyślnie SYS.używa się argv [0]).
Dodanie parametru pozycyjnego
Teraz nadszedł czas, aby dodać nasz pierwszy parametr pozycyjny do skryptu. W takim przypadku dodamy parametr „Printme”, czyli ciąg, który zostanie wydrukowany przez nasz skrypt testowy. Osiągamy to za pomocą add_argument ()
Metoda obiektu parsera, który zainicjowaliśmy powyżej:
Parser.add_argument („printme”, help = „ciąg do wydrukowania”)
Pierwszym argumentem, który podaliśmy do tej metody, jest nazwa parametru, a drugi, opcjonalny, jest pomoc
. Za pomocą tego słowa kluczowego możemy określić opis parametru, który zostanie wyświetlony w komunikacie pomocy generowanej przez ArgParse.
Należy zauważyć, że domyślnie parametry będą uważane za ciągi: Aby określić inny typ danych, musimy użyć typ
Słowo kluczowe. Na przykład, gdybyśmy chcieli, aby nasz argument został przekonwertowany na liczbę całkowitą, określilibyśmy to w ten sposób:
Parser.add_argument („printme”, type = int)
Po dodaniu naszego parametru musimy wywołać parse_args ()
Metoda obiektu parsera. Ta metoda zwróci instancję Argparse.Przestrzeń nazw
Klasa: Parametry przeanalizowane będą przechowywane jako atrybuty tej instancji. Wreszcie możemy dodać linię do wydrukowania zmiennej. W tym momencie skrypt powinien wyglądać w ten sposób:
#!/usr/bin/env python import argparse Jeśli __name__ == '__main__': # zainicjuj parser parser = argparse.ArgumentParser (opis = "prosty skrypt do wykazania użycia argParse") # Dodaj parametr parametrów pozycjonowania.add_argument („printme”, help = "ciąg do wydrukowania") # paruj argumenty argumenty = parser.parse_args () # Wreszcie wydrukuj wydruk String (argumenty.Printme)
Kopiuj Wykonajmy to:
$ ./PrinterScript.Py "Hello World!" Witaj świecie!
String, który mijaliśmy, został wydrukowany, był oczekiwany. Ale co, jeśli tego nie zapewniliśmy? Przesłanie pomocy zostałyby pokazane, opisując prawidłowe użycie skryptu:
$ ./PrinterScript.Użycie PY: PrinterScript.PY [-H] Printme PrinterScript.PY: Błąd: Za mało argumentów
Dodanie opcjonalnego parametru
Opcjonalne parametry nie są obowiązkowe do wykorzystania skryptu, ale służą one do modyfikacji jego zachowania. ArgParse rozpoznaje je, gdy widzi, że wskaźniki są podawane w opisie, więc na przykład:
Parser.add_argument ('-r', '--repeat', help = "liczba razy na drukowanie ciągu", type = int, domyślnie = 1)
Kopiuj Nazwa parametru jest prefiksowana z łącznikami (możemy określić zarówno krótką, jak i długą wersję parametrów). W takim przypadku dodaliśmy opcjonalny parametr --powtarzać
który określa, ile razy ciąg musi być wydrukowany. Użyliśmy również domyślny
Słowo kluczowe. Jest to naprawdę ważne, ponieważ dzięki temu możemy określić wartość, którą atrybut przyjmie, jeśli parametr nie jest wyraźnie podany podczas wywoływania skryptu.
W tym momencie, aby sprawdzić, czy parametr działa zgodnie z oczekiwaniami, wszystko, co musimy zrobić, to zmodyfikować nasz skrypt, aby powtórzyć drukowanie ciągu dla określonej liczby razy, dlatego dołączamy wydrukować()
funkcjonować trochę dla pętli
:
Dla i w zakresie (0, argumenty.Powtórz): Drukuj (argumenty.Printme)
Kopiuj Spróbujmy:
$ ./PrinterScript.py --repeat = 3 "Hello World!" Witaj świecie! Witaj świecie! Witaj świecie!
Wszystko poszło zgodnie z oczekiwaniami. Ponadto komunikat pomocy został również zaktualizowany, a teraz zawiera opis nowego parametru opcjonalnego:
./PrinterScript.PY -Użycie: PrinterScript.py [-h] [-r powtórzenie] Printme Prosty skrypt do zademonstrowania argParse Użycie Argumenty: Printme String do drukowania Opcjonalne argumenty: -h, - -Help Pokaż tę pomoc pomocy i powtórzenie wyjścia -r powtórzenie, -Odporuj liczbę powtórzeń razy, aby wydrukować ciąg
Jak powiedziano powyżej, kiedy Argparse
widzi, że parametr jest prefiksowany z łącznikami, zakłada, że jest opcjonalny. Aby zmodyfikować to zachowanie i „zadeklarować” jako obowiązkowe, możemy użyć wymagany
Słowo kluczowe podczas dodawania parametru w formie: wymagane = prawda
.
Słowo kluczowe „dest”
Zwykle wartość przewidziana dla parametru będzie przechowywana jako atrybut nazwany po pierwszym argumencie podanym na add_argument ()
Metoda w przypadku parametrów pozycji lub pierwszej opcji długiego ciągu (z usuniętymi łączonymi: ciąg stał się atrybutem „powtórz”) w przypadku parametrów opcjonalnych. W tym drugim przypadku, jeśli opcja długiego ciągu nie jest dostępna, używana jest krótka. Dest
Słowo kluczowe pozwala nam określić niestandardową nazwę atrybutu zamiast polegać na tym zachowaniu.
Słowo kluczowe „akcji”
Podczas korzystania z add_argument ()
Metoda możemy określić zachowanie, które należy użyć dla opcji przeanalizowanych za pomocą innego słowa kluczowego: działanie
. Domyślnym działaniem jest przypisanie przekazanej wartości do odpowiedniego atrybutu. Na przykład w przypadku naszego małego skryptu --powtarzać
parametr zostanie przypisany do atrybutu „powtórz” Argparse.Przestrzeń nazw
klasa po przeanalizowaniu argumentów. To zachowanie można jednak również zmodyfikować. Opiszmy w skrócie inne główne opcje:
Store_true i Store_false
Określając tę akcję, w zasadzie mówimy, że parametr nie wymaga argumentu: PRAWDA
zostanie przypisany jako wartość do odpowiedniego atrybutu, jeśli opcja jest podana, lub FAŁSZ
W przeciwnym razie. Store_true
I Store_false
zapewni odpowiednio wartość domyślną PRAWDA
I FAŁSZ
.
Store_const
Jest to podobne do powyższej opcji, ale używając jej jako wartości dla działanie
Słowo kluczowe, zamiast logiki, a stały
Wartość zostanie przypisana do atrybutu, jeśli użyty parametr jest używany. Ta wartość jest określana za pomocą const
Słowo kluczowe:
Parser.add_argument ("-losowo-opcja", akt = "supre_const", const = yourValue)
dodać
Jeśli dodać
jest używany jako wartość działanie
Słowo kluczowe, lista zostanie utworzona i odwołana przez odpowiedni atrybut parametru: Dostarczona wartość zostanie do niego dołączona. Jest to przydatne na wypadek, gdyby parametr był dostarczany więcej niż raz:
Parser.add_argument ('-losowo-opcja', akcja = „append”)
append_const
Tak jak podczas używania dodać
, Wartość zostanie dołączona do listy odwołanej przez atrybut parametru. Różnica polega na tym, że w tym przypadku wartość nie jest dostarczana przez użytkownika, ale zadeklarowana podczas dodawania parametru ponownie za pośrednictwem const
Słowo kluczowe:
Parser.add_argument ('--Randomoption', action = "append_const", const = „wartość do dołączania”)
Kopiuj Wzajemnie wykluczające się opcjonalne parametry
W pewnej sytuacji możemy potrzebować niektórych opcji wykluczających się wzajemnie. Argparse
Moduł pozwala nam wykonać to zadanie w różnym sposób. Zasadniczo zamierzamy stworzyć osobną grupę opcji za pomocą add_mutally_exclusive_group ()
metoda obiektu parsera i dodaj do niego nasze argumenty. Na przykład:
Parser = argParse.ArgumentParser (); # Utwórz naszą grupę wzajemnie wykluczających się argumentów wzajemnie_exclusive = parser.add_mutally_exclusive_group () MUTUALS_Exclusive.add_argument ("-foo", help = "foo wyklucza pasek").add_argument („-bar”, help = „bar i wyklucza foo”)
Kopiuj Należy zauważyć, że bycie częścią MUTULALE_EXCLUSE_GROUP
Argumenty muszą być opcjonalne, a zatem argumenty pozycyjne lub argumenty zdefiniowane zgodnie z wymaganiami (wymagane = prawda
) nie są w nim dozwolone.
W tym momencie powinieneś mieć pojęcie o tym, jak Argparse
Pracuje. Jednak porysowaliśmy tylko powierzchnię tego, co ma do zaoferowania ten moduł: dla pełnego opisu wszystkich jego funkcji prosimy o przeczytanie dokumentacji, nie pożałujesz. Niezłe skrypty!
Powiązane samouczki Linux:
- Skrypt bash: Wykorzystanie flag z przykładami argumentów
- Rzeczy do zainstalowania na Ubuntu 20.04
- Polecenia Linux: Top 20 najważniejsze polecenia, które musisz…
- Podstawowe polecenia Linux
- Jak zbudować aplikację Tkinter za pomocą obiektu zorientowanego na…
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
- Mastering Bash Script Loops
- Jak wydrukować drzewo katalogu za pomocą Linux
- Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
- Mint 20: Lepsze niż Ubuntu i Microsoft Windows?