/ / Befehlszeilenargumente in Python verwenden: Grundlegendes zu sys.argv - python, Befehlszeilenargumente, argv

Verwenden von Befehlszeilenargumenten in Python: Grundlegendes zu sys.argv - python, Befehlszeilenargumente, argv

Ich gehe gerade durch Learn Python The Hard Way. Ich denke, dieses Beispiel könnte veraltet sein, deshalb wollte ich hier Feedback geben.

Ich verwende Python 3.1

from sys import argv

script, first, second, third = argv

print("the script is called:", (script))
print("your first variable is:", (first))
print("your second variable is:", (second))
print("your third variable is:", (third))

Ich bekomme diesen Fehler:

Traceback (most recent call last):
File "/path/ch13.py", line 3, in <module>
script, first, second, third, bacon = argv
ValueError: need more than 1 value to unpack

Irgendeine Idee, was ist falsch?

Antworten:

8 für die Antwort № 1

Sie haben vergessen, Argumente an das Skript zu übergeben, z. foo.py bar baz quux.

Bildbeschreibung hier eingeben


4 für die Antwort № 2

Um Argumente übergeben zu können, müssen Sie das Skript auf folgende Weise ausführen:

python fileName.py argument1 argument2

Abhängig davon, wie viele Variablen Sie haben = zu argvSo viele müssen Sie minus das erste Argument (Skript) haben. Z.B.,

 script, first, second, third = argv

sollte 3 Argumente haben.


3 für die Antwort № 3

sys.arg ist eine Liste von Befehlszeilenparametern. Sie müssen tatsächlich Befehlszeilenparameter an das Skript übergeben, um diese Liste aufzufüllen. Führen Sie dies entweder in den Projekteinstellungen Ihrer IDE durch oder führen Sie die Befehlszeile folgendermaßen aus:

python script.py first second third

Beachten Sie, dass das erste Argument immer der Name des Skripts ist (python script.py in diesem Fall). Aufgrund Ihrer Verwendung des Auspackens erhalten Sie eine ValueError wenn Sie weniger oder mehr als 3 Parameter übergeben. Sie können die Nummer vor dem Auspacken mit überprüfen len(argv)-1 und einen geeigneten Fehler darstellen, wenn nicht 3.

Siehe dazu auch getopt wenn Sie komplexere Argumente übergeben müssen.


0 für die Antwort № 4

Sie versuchen das auszupacken argv in getrennte Werte. Das Auspacken setzt voraus, dass die exakte Anzahl der Werte mit der Größe des auszupackenden Werts übereinstimmt. Bedenken Sie:

a, b, c = [1, 2, 3]

funktioniert gut, aber das ist:

a, b, c, d, e = [1]

wird Ihnen den gleichen hässlichen Fehler geben, den Sie geradeproduziert. Das Auspacken von sys.argv auf die Art und Weise, wie Sie es getan haben, ist besonders schlecht, da die Benutzereingabe erfolgt und Sie nicht wissen, wie viele Argumente die Benutzer Ihres Skripts liefern. Sie sollten es also sorgfältig auspacken:

if len(argv) == 5:
script_name, a, b, c, d = argv
else:
print "This script needs exactly four arguments, aborting"
exit()

0 für die Antwort № 5

Sie müssen nur drei Dinge eingeben, wenn Sie das Skript öffnen. Führen Sie beispielsweise Python (dann Ihren Dateinamen.py) aus. 1 2 3. Die "1, 2 und 3" können durch beliebige drei Zahlen oder Wörter ersetzt werden.


0 für die Antwort № 6

Führen Sie den Code folgendermaßen aus:

python ch13.py first second third

0 für die Antwort № 7

Um dieses Skript in der Befehlszeile ausführen zu können, müssen Sie drei Argumente verwenden. Sie müssen etwas ähnlich dem folgenden eingeben:

python /path/ch13.py first second third

0 für die Antwort № 8
from sys import argv
a, b, c, d = argv
print "The script is called:", a
print "Your first variable is:", b
print "Your second variable is:", c
print "Your third variable is:", d

Speichern Sie dieses Skript als: s.py

Führen Sie dieses Skript wie folgt aus dem Terminal aus: Bildbeschreibung hier eingeben


0 für die Antwort № 9

Du kannst tun

(script, first, second, third) = argv

und 3 Argumente übergeben

python filename arg1 arg2 arg3

wenn Sie es von der Kommandozeile ausführen.

Ich benutze Python 3.6.0. Vorher habe ich die nicht verpackt argv Argumente in Klammern. Aber jetzt geht es.

Sie können es hier überprüfen


0 für die Antwort № 10

Ich denke, dieses Beispiel wird Ihnen helfen. Sie können die Anzahl der gewünschten Argumente übergeben, dh die Anzahl der Parameter ist variabel. : D

def main(*args):
print("Arguments Passed: ", args)

if __name__ == "__main__":
name_Script, *script_args = sys.argv
print("Name of the script: ", name_Script)
main(*script_args) #Send list of arguments