Ich möchte anmerken, dass frühere Antworten viele Annahmen über das Wissen des Benutzers enthielten. Diese Antwort versucht, die Frage auf einer eher tutoriellen Ebene zu beantworten.
Bei jedem Aufruf von Python, sys.argv
ist automatisch eine Liste von Zeichenketten, die die Argumente (durch Leerzeichen getrennt) in der Befehlszeile darstellen. Der Name kommt von der C-Programmierkonvention in dem argv und argc die Befehlszeilenargumente darstellen.
Sie werden mehr über Listen und Strings lernen wollen, wenn Sie sich mit Python vertraut machen, aber in der Zwischenzeit sind hier ein paar Dinge, die Sie wissen sollten.
Sie können einfach ein Skript erstellen, das die Argumente so ausgibt, wie sie dargestellt werden. Es gibt auch die Anzahl der Argumente aus, indem es die len
Funktion auf der Liste.
from __future__ import print_function
import sys
print(sys.argv, len(sys.argv))
Das Skript erfordert Python 2.6 oder höher. Wenn Sie dieses Skript aufrufen print_args.py
können Sie es mit verschiedenen Argumenten aufrufen, um zu sehen, was passiert.
> python print_args.py
['print_args.py'] 1
> python print_args.py foo and bar
['print_args.py', 'foo', 'and', 'bar'] 4
> python print_args.py "foo and bar"
['print_args.py', 'foo and bar'] 2
> python print_args.py "foo and bar" and baz
['print_args.py', 'foo and bar', 'and', 'baz'] 4
Wie Sie sehen können, enthalten die Befehlszeilenargumente den Skriptnamen, aber nicht den Interpreternamen. In diesem Sinne behandelt Python das Skript als die ausführbare Datei. Wenn Sie den Namen der ausführbaren Datei (in diesem Fall python) wissen müssen, können Sie sys.executable
.
Aus den Beispielen können Sie ersehen, dass es möglich ist, Argumente zu erhalten, die Leerzeichen enthalten, wenn der Benutzer das Skript mit in Anführungszeichen eingeschlossenen Argumenten aufruft, so dass Sie die Liste der Argumente erhalten, wie sie vom Benutzer geliefert wurde.
In Ihrem Python-Code können Sie nun diese Liste von Zeichenketten als Eingabe für Ihr Programm verwenden. Da Listen durch null-basierte Ganzzahlen indiziert sind, können Sie die einzelnen Elemente mit der list[0]-Syntax abrufen. Zum Beispiel, um den Skriptnamen zu erhalten:
script_name = sys.argv[0] # this will always work.
Obwohl es interessant ist, brauchen Sie Ihren Skriptnamen nur selten zu kennen. Um das erste Argument nach dem Skript für einen Dateinamen zu erhalten, könnten Sie Folgendes tun:
filename = sys.argv[1]
Dies ist eine sehr häufige Verwendung, aber beachten Sie, dass sie mit einem IndexError fehlschlägt, wenn kein Argument übergeben wurde.
Außerdem können Sie in Python auf ein Stück einer Liste verweisen, um also weitere Liste nur die vom Benutzer eingegebenen Argumente (aber ohne den Skriptnamen), können Sie
user_args = sys.argv[1:] # get everything after the script name
Außerdem können Sie in Python Variablennamen eine Folge von Elementen (einschließlich Listen) zuweisen. Wenn Sie also erwarten, dass der Benutzer immer zwei Argumente liefert, können Sie diese Argumente (als Zeichenketten) zwei Variablen zuweisen:
user_args = sys.argv[1:]
fun, games = user_args # len(user_args) had better be 2
Um also auf Ihre konkrete Frage zu antworten, sys.argv[1]
steht für das erste Befehlszeilenargument (als string
) an das betreffende Skript geliefert. Es fragt nicht nach Eingaben, schlägt aber mit einem IndexError fehl, wenn in der Befehlszeile nach dem Skriptnamen keine Argumente angegeben werden.
3 Stimmen
Dies ist nicht Teil der Frage, und es ist sehr alt, aber das Modul argparse ist wahrscheinlich besser geeignet für das, was Sie vorhaben, und zwar nach diese