So verwenden Sie ArgParse, um Python -Skripteparameter zu analysieren

So verwenden Sie ArgParse, um Python -Skripteparameter zu analysieren

Zielsetzung

Lernen Sie, das ArgParse -Modul zu verwenden, um Python -Skripte Parameter einfach zu analysieren

Anforderungen

  • Grundkenntnisse über Python und objektorientierte Konzepte

Schwierigkeit

EINFACH

Konventionen

  • # - Erfordert, dass gegebene Linux -Befehle entweder mit Root -Berechtigungen ausgeführt werden müssen
    direkt als Stammbenutzer oder durch Verwendung von sudo Befehl
  • $ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können

Einführung

In einem früheren Artikel haben wir gesehen, wie man im Kontext von Bash -Skripten Befehlszeilenargumente unter Verwendung von GETOPTS analysiert (den Artikel finden Sie hier). Jetzt werden wir sehen, wie wir die gleiche Aufgabe auf mächtigere Weise erledigen können, wenn wir ein Python -Skript schreiben.

Initialisieren Sie den Parser

Um unser Ziel zu erreichen, werden wir ein Python -Modul namens verwenden Argparse. Dadurch werden wir unsere Befehlszeilenparameter angeben und die auf ihnen basierende Skripthilfemeldung automatisch generiert. Beginnen wir also, wir werden unser Skript „Druckerskript anrufen.py ”:

#!/usr/bin/env python import argParse, wenn __name__ == '__main__': # Initialisieren Sie den Parser Parser = argParse.ArgumentParser (Beschreibung = "Einfaches Skript zur Demonstration von ArgParse -Nutzung")
Kopieren

Das erste, was zu tun ist, ist offensichtlich, die zu importieren Argparse Modul. Danach initialisieren wir den Parser. Der Beschreibung Schlüsselwort, übergeben an den Parser -Konstruktor, ist optional, ermöglicht es uns jedoch, eine kurze Beschreibung des Skripts hinzuzufügen.

Es gibt andere Schlüsselwörter, mit denen wir das Verhalten des Parsers weiter anpassen können: beispielsweise das Bereitstellen der Epilog Schlüsselwort Wir können einen Text angeben, der nach der Haupthilfenachricht angezeigt wird oder mithilfe von Verwendung Prog Wir können den Namen des Programms angeben, das im selben Kontext angezeigt werden soll (standardmäßig Systeme.Argv [0] wird verwendet).



Hinzufügen eines Positionsparameters Hinzufügen

Jetzt ist es Zeit, dem Skript unseren ersten Positionsparameter hinzuzufügen. In diesem Fall fügen wir den Parameter "Printme" hinzu, das ist die Zeichenfolge, die von unserem Testskript gedruckt wird. Wir erreichen dies, indem wir die verwenden add_argument () Methode des Parser -Objekts, das wir oben initialisiert haben:

Parser.add_argument ('printme', help = "Die zu druckende Zeichenfolge"))

Das erste Argument, das wir der Methode vorgelegt haben, ist der Name des Parameters und das zweite, optional, ist Hilfe. Mit diesem Schlüsselwort können wir die Beschreibung für den Parameter angeben, der in der von ArgParse generierten Hilfemeldung angezeigt wird.

Es ist wichtig zu bemerken, dass die Parameter standardmäßig als Zeichenfolgen betrachtet werden: Um einen anderen Datentyp anzugeben, müssen wir die verwenden Typ Stichwort. Wenn wir beispielsweise wollten, dass unser Argument in eine Ganzzahl umgewandelt wird, hätten wir es so spezifiziert:

Parser.add_argument ('printme', type = int)

Sobald wir unseren Parameter hinzugefügt haben, müssen wir die aufrufen Parse_args () Methode des Parser -Objekts. Diese Methode gibt eine Instanz der zurück Argparse.Namespace Klasse: Die Parsen -Parameter werden als Attribute dieser Instanz gespeichert. Schließlich können wir eine Zeile hinzufügen, um die Variable zu drucken. An diesem Punkt sollte das Skript so aussehen:

#!/usr/bin/env python import argParse, wenn __name__ == '__main__': # Initialisieren Sie den Parser Parser = argParse.ArgumentParser (Beschreibung = "Einfaches Skript zur Demonstration von ArgParse -Nutzung") # Fügen Sie den Positionalparameter -Parser hinzu.add_argument ('printme', help = "Die zu druckende Zeichenfolge") # Analysieren Sie die Argumente Argumente = Parser.Parse_args () # Drucken Sie schließlich den übergebenen String -Druck (Argumente.Druck mich)
Kopieren

Lassen Sie es uns ausführen:

$ ./Drucker.Py "Hallo Welt!" Hallo Welt! 

Die von uns bestandene Saite wurde gedruckt. Aber was ist, wenn wir es nicht zur Verfügung gestellt haben? Die Hilfebotschaft wäre gezeigt worden, in der das Skript korrekte Verwendung beschrieben wurde:

$ ./Drucker.PY -Nutzung: Druckerskript.PY [-H] PrintMe-Druckerskript.PY: Fehler: Zu wenige Argumente 


Hinzufügen eines optionalen Parameters

Optionale Parameter sind für die Verwendung des Skripts nicht obligatorisch, aber sie werden verwendet, um sein Verhalten zu ändern. ArgParse erkennt sie an, wenn in der Beschreibung beispielsweise Bindestriche bereitgestellt werden, zum Beispiel:

Parser.add_argument ('-r', '-Repeat', help = "Anzahl oft, um die Zeichenfolge zu drucken", type = int, default = 1)
Kopieren

Der Name des Parameters wird mit Bindestrichen vorangestellt (wir können sowohl die kurze als auch die lange Parameterversion angeben). In diesem Fall haben wir den optionalen Parameter hinzugefügt --wiederholen Dies gibt an, wie oft die Zeichenfolge gedruckt werden muss. Wir haben auch die benutzt Standard Stichwort. Dies ist wirklich wichtig, denn damit können wir den Wert angeben, den das Attribut annimmt, wenn der Parameter beim Aufrufen des Skripts nicht explizit bereitgestellt wird.

Um zu überprüfen, ob der Parameter wie erwartet funktioniert drucken() in ein wenig funktionieren Für Schleife:

für i in Reichweite (0, Argumente.Wiederholen): Druck (Argumente.Druck mich) 
Kopieren

Lass es uns versuchen:

$ ./Drucker.PY -Repeat = 3 "Hallo Welt!" Hallo Welt! Hallo Welt! Hallo Welt! 

Alles ging wie erwartet. Darüber hinaus wurde die Hilfemeldung aktualisiert und enthält nun eine Beschreibung des neuen optionalen Parameters:

./Drucker.PY -HELP -Nutzung: Druckerskript.PY [-h] [-r Wiederholung] Printme Einfaches Skript zum Demonstration von Argumente der Argparse -Nutzung. von Zeiten, um die Zeichenfolge zu drucken 

Wie oben gesagt, wenn Argparse sieht, dass ein Parameter mit Bindestrichen vorangestellt ist, er wird davon ausgegangen, dass er optional ist. Um dieses Verhalten zu ändern und es als obligatorisch zu deklarieren, können wir das verwenden erforderlich Schlüsselwort beim Hinzufügen des Parameters im Formular: Erforderlich = wahr.

Das Schlüsselwort "Dest"

Normalerweise wird der Wert für einen Parameter als Attribut gespeichert add_argument () Methode im Fall von Positionsparametern oder der ersten langen String -Option (mit den Bindestrichen entfernt: Die Repeat -Zeichenfolge wird zum Attribut "Wiederholung") im Fall der optionalen Parameter. Wenn im letzteren Fall eine lange String -Option nicht verfügbar ist, wird der kurze verwendet. Der Ziel Mit dem Schlüsselwort können wir einen benutzerdefinierten Attributnamen angeben, anstatt sich auf dieses Verhalten zu verlassen.



Das Schlüsselwort "Aktion"

Bei Verwendung der add_argument () Methode Wir können das Verhalten angeben, das für die analysierten Optionen verwendet werden soll, indem wir ein anderes Schlüsselwort verwenden: Aktion. Die Standardaktion besteht darin, den übergebenen Wert dem entsprechenden Attribut zuzuweisen. Im Falle unseres winzigen Skripts beispielsweise der Wert für die --wiederholen Parameter, wird dem Attribut "Wiederholung" von dem zugewiesen Argparse.Namespace Klasse Sobald die Argumente analysiert sind. Dieses Verhalten kann jedoch auch geändert werden. Beschreiben wir die anderen Hauptoptionen kurz:

store_true und store_false

Durch die Angabe dieser Aktion sagen wir im Grunde, dass der Parameter kein Argument erfordert: WAHR wird dem entsprechenden Attribut als Wert zugewiesen, wenn die Option bereitgestellt wird, oder FALSCH ansonsten. store_true Und store_false liefert jeweils einen Standardwert von WAHR Und FALSCH.

store_const

Dies ähnelt der obigen Option, indem sie sie jedoch als Wert für die verwenden Aktion Schlüsselwort anstelle eines Booleschen, a Konstante Der Wert wird dem Attribut zugewiesen, wenn der Parameter verwendet wird. Dieser Wert wird durch Verwendung der verwendet Const Stichwort:

Parser.add_argument ("-random-option", action = "store_const", const = yourvalue)
anhängen

Wenn anhängen wird als Wert der verwendet Aktion Schlüsselwort, eine Liste wird durch das entsprechende Parameterattribut erstellt und verwiesen: Der angegebene Wert wird angehängt. Dies ist nützlich, falls der Parameter mehr als einmal bereitgestellt wird:

Parser.add_argument ('-random-option', action = "append")
append_const

Genau wie bei der Verwendung anhängen, Ein Wert wird an die Liste angehängt, auf die das Parameterattribut verwiesen wird. Die Differenz besteht darin, dass der Wert in diesem Fall nicht vom Benutzer bereitgestellt, sondern beim Hinzufügen des Parameters über die erneut deklariert wird Const Stichwort:

Parser.add_argument ('-randomoption', action = "append_const", const = "Der Wert zum Anhängen")
Kopieren

Gegenseitig ausschließende optionale Parameter

In einer bestimmten Situation müssen wir möglicherweise einige Optionen ausschließen, die sich gegenseitig ausschließen. Der Argparse Mit dem Modul können wir diese Aufgabe unterschiedlich erledigen. Grundsätzlich werden wir eine separate Gruppe von Optionen erstellen, die mit dem erstellt werden add_mutually_exclusive_group ()) Methode des Parser -Objekts und fügen Sie unsere Argumente hinzu. Zum Beispiel:

Parser = argParse.ArgumentParser (); # Erstellen Sie unsere Gruppe von gegenseitig ausschließlichen Argumenten maßgeblich_exclusive = Parser.add_mutually_exclusive_group () muitual_exclusive.add_argument ("-foo", help = "foo excludes bar") mapituell_exclusive.add_argument ("-bar", help = "baly schließt Foo aus")
Kopieren

Eine Sache zu bemerken ist, dass ein Teil von a ist MISTEL_EXCLUSIVE_GROUP Argumente müssen optional sein, daher Positionsargumente oder Argumente, die Sie bei Bedarf definiert haben (Erforderlich = wahr) sind nicht darin erlaubt.

An diesem Punkt sollten Sie eine Vorstellung davon haben, wie Argparse Arbeiten. Wir haben jedoch nur die Oberfläche dessen, was dieses Modul zu bieten hat. Schönes Scripting!

Verwandte Linux -Tutorials:

  • Bash -Skript: FLAGS -Nutzung mit Argumentenbeispielen
  • Dinge zu installieren auf Ubuntu 20.04
  • Linux -Befehle: Top 20 wichtigste Befehle, die Sie benötigen, um…
  • Grundlegende Linux -Befehle
  • So erstellen Sie eine Tkinter -Anwendung mithilfe eines objektorientierten…
  • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
  • Mastering -Bash -Skriptschleifen beherrschen
  • So drucken Sie den Verzeichnisbaum mit Linux
  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • Mint 20: Besser als Ubuntu und Microsoft Windows?