Das OS-X-Terminal verhält sich seltsam, nachdem Python interaktiv ausgeführt wurde

11

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 pythonerneut 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-dErgebnisse:

>>> ^D           (ctrl-d, then hit enter, doesn't exit)
>>> ^D           (...)
>>> ^D           (...)
>>> exit()       (typing exit() quits the session)
>>> [~]: 
Andrew Backer
quelle
Warum installieren Sie Python über Macports? Python v2.7.10 ist in El Cap enthalten, und ich denke, Yosemite ... Gibt es etwas Besonderes, das Sie von Mac Ports erhalten?
Benjamin Schollnick
Nun, mit 2.7. Alles, was größer ist als das, was mit dem Mac geliefert wurde. Das Systempython wird nicht berührt (Standardproblem bei Unixen), 2.7 mit benutzerdefinierten GIS-Optionen ausgeführt, mit kompiliertem Paket mgmt für diese sowie 3.4 gleichzeitig. Aber der wahre Grund, warum Sie es tun sollten, ist, nicht mit dem Systempython zu fscken.
Andrew Backer
Führt die Python-Anwendung irgendeine Art von Fensterverwaltung durch? (zB mit Flüchen, Flüchen usw.)
Benjamin Schollnick
Es gibt keine Anwendung, nur tippen pythonund dannctrl-d
Andrew Backer

Antworten:

12

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.

sudo port uninstall python27
sudo port install python27 +readline
B. Strand
quelle
9
Verdammt, danke, dass du diesen Fehlerbericht gefunden hast. FWIW, es ist nicht möglich, python27 zu deinstallieren (normalerweise hängen zu viele Pakete davon ab), daher sollten Sie stattdessen neu erstellen. Ausführen 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. das selfupdatewird das beheben.
Andrew Backer
8

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

stty sane

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 resetBefehls, aber die angegebenen Symptome sind für die Funktionsweise dieses Programms nicht relevant.

Zur weiteren Lektüre

Thomas Dickey
quelle
stty echoscheint 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.
Andrew Backer
Obwohl dies das Problem nicht behebt, kann ich es zumindest nachträglich beheben. Das ist vorerst gut genug für mich. Wenn es eine Möglichkeit gibt herauszufinden, warum dies geschieht, würde ich es gerne wissen.
Andrew Backer