Terminal in gebrochenem Zustand (unsichtbarer text / no echo) nach dem exit() beim input() / raw_input()

Ich Schreibe eine kleine Anwendung mit Python 3 (die unten testcase funktioniert auch in Python 2, aber) und PyQt 4 verwendet, die code Modul zum laichen einen REPL-prompt ermöglicht die Interaktion mit einem Qt-Fenster.

Leider habe ich ein problem haben, ich habe nicht in der Lage zu lösen: Wenn ich exit() die app während code innerhalb input() (bekannt als raw_input() in Python 2.x) mein Linux-terminal anschließend nicht mehr Echos eingegebenen Zeichen. I. e. das terminal erscheint Links in einem Defekten Zustand befindet, vermutlich weil einige escape-Sequenz, ausgegeben von input().

Habe ich versucht eine Vielzahl von Ansätzen, um dieses Problem zu lösen, die aus der Verwendung der curses Modul und setzen Sie das terminal zurück, bevor Sie unter exit, zu versuchen, zu emulieren, die stdin stream zu beenden, indem er tatsächlich die übergabe exit() zur input () - (unfornunately code.InteractiveConsole.push() funktioniert nicht so, wie man denken könnte, es würde), zu versuchen, zu schreiben, meine eigenen, nicht-blockierende input() mit threading, aber ich habe nicht in der Lage an einem Strang zu ziehen, etwas zu arbeiten.

Hier, hier, hier und hier sind Diskussionen über ähnliche Probleme.

Schließlich, hier ist eine reduzierte testcase um das problem zu demonstrieren:

#!/usr/bin/env python3

import code
import sys
from PyQt4.QtGui import QApplication, QWidget

app = QApplication(sys.argv)

app.lastWindowClosed.connect(exit)

widget = QWidget()
widget.show()

code.interact()

Für diejenigen, die nicht mit (Py)Qt, es öffnet sich ein leeres Fenster, und wenn es geschlossen ist, wird die Verbindung von app's lastWindowClosed signal bewirkt, dass ein Aufruf der built-in exit() - Funktion zu passieren. Dieses tritt auf, während der code Modul ausgeführt wird, den einen Anruf zu input() Lesen von sys.stdin. Und hier, wenn ich das Fenster schließen, die Eingabe in das terminal danach nicht zeigen, die Typen, die Charaktere.

Bin ich hauptsächlich mit Python 3, und die eigentliche app verwendet Python 3-spezifischen code, aber ich habe versucht den testcase in Python 2.7 als auch, und es zeigt das gleiche problem.

  • Ich kann nicht reproduzieren Sie das problem im win7-64bit python26. Wenn ich in der Nähe der qt-Rahmen-die Konsole bringt wieder die normale Eingabeaufforderung und ich kann text eingeben, der auf es.
  • Ich sollte erwähnt haben, dass ich laufen unter Linux (ich werde Bearbeiten, zu erwähnen, dass). Das terminal Verhalten wahrscheinlich unterscheidet sich wesentlich zwischen den Plattformen. Vielen Dank für die überprüfung, aber!
InformationsquelleAutor Sho | 2011-10-29
Schreibe einen Kommentar