Jak używać ArgParse do parsowania parametrów skryptów Python

Jak używać ArgParse do parsowania parametrów skryptów Python

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?