Nach dem Ausführen einer Python-Repl (2.7.10) im os-x-Terminal und dem Beenden gibt das Terminal keine eingegebenen Eingaben mehr wieder und es passieren einige andere seltsame Dinge. Wenn ich python
erneut laufe und exit()
, scheint das Terminal wiederhergestellt zu sein. Ich schließe jetzt einfach die Registerkarte und öffne eine neue, also habe ich das nicht ausgiebig getestet.
Ich denke, dies hängt mit den Terminaleinstellungen zusammen, aber es ist eine neue Sache und ich habe nichts geändert, woran ich mich erinnere. Python wird mit installiert macports
, wenn etwas mit falsch übereinstimmenden Abhängigkeiten mit einer Konsolenbibliothek zu tun hat. 2.7.10 wurde vor einiger Zeit installiert, und dies geschah nach der Installation nicht.
Knackt die Knöchel und öffnet sichterminal
[~]: virtualenv-2.7 venv-test
[~]: source venv-test/bin/activate
[~]: python
>>> ^D>>> *(press ctrl-d, the 2nd >>> is strange)
[~]: *(type something like `ls-l`, nothing shows on console)
[~]: -bash: ls-l: command not found`
Wenn Sie Python erneut ausführen und drücken, erhalten Sie folgende ctrl-d
Ergebnisse:
>>> ^D (ctrl-d, then hit enter, doesn't exit)
>>> ^D (...)
>>> ^D (...)
>>> exit() (typing exit() quits the session)
>>> [~]:
python
und dannctrl-d
Antworten:
In MacPorts gibt es einen offenen Fehler zu diesem Problem:
https://trac.macports.org/ticket/48807
Es heißt, dass die Installation von Python mit der Option "+ readline" das Problem behebt, das ich selbst überprüft habe.
quelle
sudo port selfupdate && sudo port clean python27 && sudo port install python27 +readline
. Wenn Ihr lokaler Baum veraltet ist, ist die Variante + readline nicht verfügbar. dasselfupdate
wird das beheben.Die Terminalmodi werden von Ihrer Anwendung auf RAW oder Cbreak eingestellt, und bei abnormalem Beenden werden die Modi nicht wiederhergestellt. Insbesondere die Funktion, die den EnterSchlüssel (control / M aka Wagenrücklauf) der Zeilenumbruch (control / J aka Zeilenvorschub) zuordnet, ist in diesem Fall häufig deaktiviert. Sie können das Problem mit Rücksendungen durch Eingabe beheben
gefolgt von controlJ
Auf diese Weise können Sie zumindest erneut Befehle eingeben, obwohl die Bearbeitungszeichen, wie sie backspacemöglicherweise nicht ihren üblichen Funktionen zugewiesen sind.
Einige empfehlen möglicherweise auch die Verwendung des
reset
Befehls, aber die angegebenen Symptome sind für die Funktionsweise dieses Programms nicht relevant.Zur weiteren Lektüre
stty
Handbuchseite interessanterweise GNUquelle
stty echo
scheint das Problem zu beheben ( stackoverflow.com/questions/32475928/python3-messes-up-terminal ). Ich bin mir nicht sicher, ob es alles erledigt. Ich denke, dass etwas mit meinem Python nicht stimmt, da ich bei Syntaxfehlern manuell auf newline drücken muss, um einen neuen Befehl einzugeben, und das sollte nicht so sein.Das hat bei mir funktioniert (mit OSX und pyenv):
Quelle: https://medium.com/@pimterry/setting-up-pyenv-on-os-x-with-homebrew-56c7541fd331#.urbdkrc9l
quelle