sys.Argv in Python

sys.Argv in Python
Das Systemmodul besteht aus Funktionen und Variablen, die stark mit dem Dolmetscher interagieren. Das SYS-Modul wird in Python vorbelastet und erfordert keine Installation. Unter den vielen Funktionen und Variablen sind Systeme.argv (). Sys.Argv () wird verwendet, um die Befehlszeilenbenutzereingabe zu sammeln. In diesem Tutorial werden wir etwas über Sys lernen.argv () und seine gemeinsamen Verwendungen.

sys.argv

Im Wesentlichen Sys.argv () ist eine Liste aller Befehlszeileneingänge. Wenn das Skript ausgeführt wird, können Sie seine Benutzereingabe auf verschiedene Weise füttern, und eine solche Möglichkeit ist über die Befehlszeile. Nehmen wir in diesem ersten Fall an, dass wir ein einfaches Skript namens Main haben.py.

Druck („Hallo Welt“)

Während der Ausführung des Skripts werden wir zusätzlich zum Skriptnamen einige Befehlszeilenargumente hinzufügen. Wenn wir das Skript ausführen würden, würden wir Folgendes bekommen:

$ python3 main.py, was hast du vor??
Hallo Welt

Sie bemerken hier, dass die Befehlszeilenargumente das Skript selbst nicht beeinträchtigt haben.

Lassen Sie uns nun das Skript ein wenig ändern. Nehmen wir also an, dass wir jetzt ein Skript namens Main haben.PY mit dem folgenden Inhalt:

Importsystem
Druck (sys.argv)

Wenn wir das Skript ausführen würden, würden wir Folgendes bekommen:

$ python3 main.py
['hauptsächlich.py ']

Wie Sie sehen können, erhalten wir eine Liste mit einem Element darin, da wir sie nur mit einem Element geliefert haben, dem Skriptnamen. Nehmen wir nun an, dass wir ihm eine etwas andere Befehlszeileneingabeargumente liefern.

Importsystem
Druck (sys.argv)

Wenn wir das Skript ausführen würden, würden wir Folgendes bekommen:

$ python3 main.Py Hello World
['hauptsächlich.Py, "Hallo", "Welt"]

Nun, was passiert, ist, dass es alles abruft, was wir über die Befehlszeile oder alle vom Benutzer bereitgestellten Befehlszeilenargumente bereitgestellt haben. In meinem Fall fügte ich "Hallo Welt" nach dem Namen des Skripts hinzu, und als solche wurde es auf die Liste abgerufen.

sys.argv [0]

Sys.Argv [0] ist das erste Argument in der Liste. In allen Fällen ist das erste Argument immer der Name des Skripts.

Importsystem
name_of_script = sys.argv [0]
print (name_of_script)

Bei der Ausführung des Skripts geben wir Folgendes ein:

$ python3 main.py
hauptsächlich.py

sys.argv [n]

Alternativ möchten Sie möglicherweise ein spezifisches Befehlszeilenargument abrufen. Zum Beispiel möchten Sie beim Schreiben eines Python -Programms möglicherweise die Eingabe des Benutzers über Befehlszeilenargumente abrufen. In diesem Szenario werden wir die ersten drei Befehlszeilenargumente abrufen.

Importsystem
name1 = sys.Argv [1]
name2 = sys.Argv [2]
name3 = sys.Argv [3]
print ("Hallo", name1, ',', name2, 'und', name3)

Bei der Ausführung des Skripts geben wir zum Beispiel Folgendes ein:

$ python3 main.Py Trevor Travis Tim
Hallo Trevor, Travis und Tim

Hier, sys.Argv [1] ist das zweite Befehlszeilenargument, während Sys.Argv [2] ist das dritte Kommandozeilenargument und das System.Argv [3] ist das vierte Kommandozeilenargument. Dies liegt so, weil der Index bei 0 und sys beginnt.Argv [0] ist der Name des Skripts.

Was wäre, wenn von dem Benutzer von der Anzahl der Eingänge erwartet wird, dass wir nicht wussten, wie viele Eingaben es gab? Angenommen, das folgende Skript wurde geschrieben:

Importsystem
list = sys.Argv [1:]
Für Wert in der Liste:
Druck (Wert)

Bei der Ausführung des Skripts geben wir zum Beispiel Folgendes ein:

$ python3 main.Py Hallo Trevor Travis und Tim
Hallo
Trevor
Travis
Und
Tim

Hier, sys.Argv [1:] bedeutet, dass alle Werte aus SYS.Argv [1] werden bis zum Ende der Liste verwendet. In diesem Fall können wir so viele Befehlszeilenargumente hinzufügen, wie wir es wollen.

Saiten

Bitte beachten Sie, dass alle von dem variablen System erfassten Werte.Argv sind Saiten. Nehmen wir also an, dass wir drei Zahlen hinzufügen wollten, die der Benutzer eingibt.

Importsystem
Num1 = sys.Argv [1]
Num2 = sys.Argv [2]
Num3 = sys.Argv [3]
list = [num1, num2, num3]
Gesamt = Summe (Liste)
Druck (Gesamt)

Wenn wir das Skript ausführen würden, würden wir Folgendes bekommen:

$ python3 main2.PY 3 4 5
TypeError: Nicht unterstützte Operandentypen für +: 'int' und 'str'

Was wir bekommen, ist ein Typeerror. Dies liegt darauf. Um dies zu korrigieren, müssten wir die Saiten in Ganzzahlen umwandeln:

Importsystem
Num1 = int (sys.argv [1])
Num2 = int (sys.argv [2])
Num3 = int (sys.argv [3])
list = [num1, num2, num3]
Gesamt = Summe (Liste)
Druck (Gesamt)

Wenn wir das Skript ausführen würden, würden wir Folgendes bekommen:

$ python3 main2.PY 3 4 5
12

Wir haben Int hinzugefügt (SYS.arg [n]) stellte sicher, dass wir die Zeichenfolge in eine Ganzzahl umgewandelt haben.

Sys.ARGV -Fehler

Einer der häufigsten Fehler, die geworfen werden (wenn wir kein System verwenden.ARGV [1:], aber eher den n -ten Wert anhand von SYS angeben.Argv [n]) ist die eines IndexErrors (Listenindex außerhalb des Bereichs). Dieser Fehler bedeutet, dass die Befehlszeilenargumente nicht angegeben wurden, und um diesen Fehler abzuwenden, müssen wir einige Vorsichtsmaßnahmen ergreifen:

Importsystem
Wenn Len (sys.argv) 4:
drucken ("Bitte geben Sie drei Namen ein")
Wenn Len (sys.ARV) == 4:
name1 = sys.Argv [1]
name2 = sys.Argv [2]
AME3 = sys.Argv [3]
print ("Hallo", Name1)
print ("Hallo", Name2)
print ("Hallo", Name3)

Bei der Ausführung des Skripts geben wir zum Beispiel Folgendes ein:

$ python3 main.Py Travis Trevor Tim
Hallo Travis
Hallo Trevor
Hallo Tim

Um den Fehler abzuwenden, müssen wir die Länge der Befehlszeilenargumente anpassen. Im vorherigen Beispiel haben wir drei Namen und einen Skriptnamen, was bedeutet, dass insgesamt 4 Werte vorhanden sind. Wir sagen daher, dass der Benutzer, wenn die Länge größer als 4 oder weniger als 4 ist, drei Namen eingibt. Drucken Sie sonst die drei Namen aus.

Das Systemmodul ist sehr wichtig, da es die Interaktion mit dem Python -Interpreter ermöglicht. Insbesondere das variable System.ARGV ist eine Liste, die alle Befehlszeilenargumente der Benutzer enthält. Sys.Argv [0] definiert den Namen des Skripts in allen Fällen. Obwohl sys.Argv () wird sehr häufig verwendet, um die Argumente der Befehlszeilen zu sammeln. Eine weitere noch bessere Möglichkeit, Befehlszeilenargumente zu sammeln, besteht darin, ArgParse zu verwenden. Aber das ist eine Geschichte für einen anderen Tag!