Was bedeutet 'sys.argv'?

Ich lerne von Code, und ich bin verwirrt durch eine seiner Zeilen, die ist:

things = [float(arg) for arg in sys.argv[1:]] Omega_a, Omega_b, Delta_a, Delta_b, \ init_pop_a, init_pop_b, tstep, tfinal = things 

Ich habe online gesucht und versucht zu verstehen, was sys.arg bedeutet, und hier ist mein Verständnis:

Also sys.argv[0] ist der Dateiname und sys.argv[1:] ist der Rest der Parameter, die von den Benutzern gegeben werden sollen. Ich bin mir nicht sicher, dass ich es richtig verstanden habe, und wenn es so ist, dann verstehe ich nicht, warum es nicht so sein kann:

 Omega_a = input() Omega_b = input() etc... 

Was ist der Unterschied zwischen diesen beiden Möglichkeiten, Parameter zu geben?

Auch wenn ich den Code ausführe (drücke F5 ), gibt mir die Python-Shell einen Fehler wie:

 Traceback (most recent call last): File "C:\Users\testcode.py", line 55, in <module> init_pop_a, init_pop_b, tstep, tfinal = things ValueError: need more than 0 values to unpack 

Ich habe nicht einmal eine Chance gegeben, Parameter zu geben ( sys.argv[1:] ), bevor es mir einen Fehler gab. Also habe ich online gesucht Es sieht so aus, als müsste ich diesen Code in cmd ausführen, der mich mehr verwirrt hat, warum sollte es und wie soll ich in cmd setzen, um es auszuführen?

4 Solutions collect form web for “Was bedeutet 'sys.argv'?”

Der Unterschied ist, dass sys.argv (Kommandozeilen) Parameter gegeben werden, bevor das Programm läuft (beim Starten):

 python testcode.py arg1 arg2 arg3 arg4 and so on ... 

Dies würde dazu führen, dass Ihre Variablen:

 Omega_a = 'arg1' Omega_b = 'arg2' Delta_a = 'arg3' Delta_b = 'arg4' init_pop_a = 'and' init_pop_b = 'so' tstep = 'on' tfinal = '...' 

Während die input() s gegeben wird, wenn das Programm läuft.

Da du das Programm nicht mit Parametern startet, gibt es dir den Fehler, da es nicht genügend (genau 0) Parameter gibt, die in die Variablen ausgepackt werden sollen.

Alle anderen Antworten erklärten sys.argv ganz gut, aber ich denke, es gab ein Stück fundamentale Terminologie, die fehlte. Ich wollte das nur hinzufügen …

input() sagt dein Programm von stdin zu lesen.

Es ist wie das Lesen aus einer Datei und ist ein Stream. Der Befehl input() lautet, bis ein Zeilenumbruch erreicht ist. Sie können auch stdin lesen, bis ein EOF erreicht ist ( Ende der Datei ).

sys.argv auf der anderen Seite ist einfach eine Liste, die Ihnen von dem System zur Verfügung gestellt wird, das alle Argumente enthält, die verwendet wurden, um den Befehl von der Shell aufzurufen. Technisch gibt es irgendeine Art von Limit (auf einer System-by-System-Basis) auf die maximale Anzahl von Argumenten, die auf der Befehlszeile übergeben werden können , weshalb der Befehl xargs existiert (um Ihren Befehl mit Chargen Ihrer Argumente anzurufen, aufteilen).

Stdin

echo "I am stdin" | myCommand.py

… Welches ist das gleiche Konzept unter der Kapuze, wie dies zu tun ist NACH dein Programm läuft:

read_from_stdin = input()

Args

myCommand.py "I am an arg"

Und schließlich, das Lesen von stdin / input() wird nicht automatisch aufgeteilt Ihre Worte in eine Liste. Es gibt zusätzliche Methoden für das Lesen von Zeile, die Sie verwenden können. Sie können aber auch durch Charakter, eine bestimmte Anzahl von Zeichen zu einer Zeit oder die gesamte Menge an Daten auf einmal lesen.

sys.argv werden als "Befehlszeilenparameter" bezeichnet. Wenn du sie passieren möchtest, solltest du dich von einer Kommandozeile ausführen. Auf einem Windows-System würde der Befehl aussehen:

 cmd> python C:\Users\testcode.py arg1 args2 

Wo "cmd>" ist die Eingabeaufforderung erhalten Sie nach der Verwendung von "Start" -> "Run".

Parameter sind nicht die gleichen wie die Programm-Eingabe. Zum Beispiel, hier ist wget mit Parametern verwendet:

 $ wget "I am a parameter!" 

Hier ist die cat mit der Eingabe:

 $ cat Now you type. This is the input. 

Das ist der Grund für Ihren Fehler auch – Sie können die Parameter nicht als solche nach dem Ausführen des Programms angeben.

  • Wie beendet man sys.stdin.readlines () Eingabe?
  • Warum sollten wir Sys.setdefaultencoding ("utf-8") nicht in einem py-Skript verwenden?
  • Was ist der Unterschied zwischen einem Stapel und einem Rahmen?
  • IPython sys.path anders als python sys.path
  • Setzen Sie LD_LIBRARY_PATH vor dem Importieren in Python
  • Kombiniere eine Liste in Tupelpaare (x, y) - Python
  • Python: Ein Diagramm importieren
  • Python sys.argv zu bewahren '' oder ""
  • Wie importiere ich Dateien in python mit sys.path.append?
  • Selen: Python-Skript beenden, ohne den Browser zu schließen
  • Ist es möglich, auf ein Python-Frame-Objekt zu schreiben, wie es von sys._getframe () aus dem Python-Code zurückgegeben wird, der innerhalb des Interpreters läuft?
  • Python ist die beste Programmiersprache der Welt.