TL; DR
inputDie Funktion in Python 2.7 wertet Ihre Eingabe als Python-Ausdruck aus. Wenn Sie nur Zeichenfolgen lesen möchten, verwenden Sie die raw_inputFunktion in Python 2.7, mit der die gelesenen Zeichenfolgen nicht ausgewertet werden.
Wenn Sie Python 3.x verwenden, raw_inputwurde in umbenannt input. Zitieren der Python 3.0- Versionshinweise ,
raw_input()wurde umbenannt in input(). Das heißt, die neue input()Funktion liest eine Zeile aus sys.stdinund gibt sie zurück, wobei die nachfolgende neue Zeile entfernt wird. Es wird ausgelöst, EOFErrorwenn die Eingabe vorzeitig beendet wird. input()Verwenden Sie, um das alte Verhalten von zu erhalteneval(input())
In Python 2.7 gibt es zwei Funktionen, mit denen Benutzereingaben akzeptiert werden können. Einer ist inputund der andere ist raw_input. Sie können sich die Beziehung zwischen ihnen wie folgt vorstellen
input = eval(raw_input)
Betrachten Sie den folgenden Code, um dies besser zu verstehen
>>> dude = "thefourtheye"
>>> input_variable = input("Enter your name: ")
Enter your name: dude
>>> input_variable
'thefourtheye'
inputAkzeptiert eine Zeichenfolge vom Benutzer und wertet die Zeichenfolge im aktuellen Python-Kontext aus. Wenn ich dudeals Eingabe eingebe, wird festgestellt, dass dies dudean den Wert gebunden ist thefourtheyeund das Ergebnis der Auswertung wird thefourtheyeund dem zugewiesen wird input_variable.
Wenn ich etwas anderes eingebe, das im aktuellen Python-Kontext nicht vorhanden ist, schlägt dies fehl NameError.
>>> input("Enter your name: ")
Enter your name: dummy
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'dummy' is not defined
Sicherheitsüberlegungen zu Python 2.7 input:
Da alle Benutzertypen ausgewertet werden, entstehen auch Sicherheitsprobleme. Zum Beispiel, wenn Sie bereits ein osModul in Ihr Programm geladen haben import osund der Benutzer dann eingibt
os.remove("/etc/hosts")
Dies wird von Python als Funktionsaufrufausdruck ausgewertet und ausgeführt. Wenn Sie Python mit erhöhten Berechtigungen ausführen, wird die /etc/hostsDatei gelöscht. Sehen Sie, wie gefährlich es sein könnte?
Um dies zu demonstrieren, versuchen wir inputerneut , die Funktion auszuführen .
>>> dude = "thefourtheye"
>>> input("Enter your name: ")
Enter your name: input("Enter your name again: ")
Enter your name again: dude
Wenn input("Enter your name: ")es jetzt ausgeführt wird, wartet es auf die Benutzereingabe und die Benutzereingabe ist ein gültiger Python-Funktionsaufruf und wird daher auch aufgerufen. Deshalb sehen wir Enter your name again:wieder prompt.
Mit dieser raw_inputFunktion sind Sie also besser dran
input_variable = raw_input("Enter your name: ")
Wenn Sie das Ergebnis in einen anderen Typ konvertieren müssen, können Sie die von zurückgegebene Zeichenfolge mithilfe geeigneter Funktionen konvertieren raw_input. Verwenden Sie beispielsweise die intin dieser Antwort gezeigte Funktion, um Eingaben als Ganzzahlen zu lesen .
In Python 3.x gibt es nur eine Funktion zum Abrufen von Benutzereingaben, die aufgerufen inputwird und Python 2.7 entspricht raw_input.
input, dass ich mich so verhalte, aber nur in 2.7. Was sagt es aus, wenn Siepython --versionan einer Eingabeaufforderung ausgeführt werden? Was ist alternativ, wenn Sieimport sys; print(sys.version)am Anfang Ihres Skripts schreiben ?