He estado escribiendo una pequeña aplicación de utilidad usando Python 3 (el caso de prueba a continuación también funciona en Python 2) y PyQt 4 que usa el módulo code
para engendrar un mensaje REPL que permite la interacción con una ventana Qt.Terminal en estado interrumpido (texto invisible/sin eco) después de la salida() durante la entrada()/raw_input()
Por desgracia he golpeado un problema que he sido incapaz de resolver: Cuando exit()
la aplicación mientras está dentro code
input()
(conocido como raw_input()
en Python 2.x), mi terminal Linux posteriormente no hay ecos más largos caracteres escritos. Es decir. el terminal parece quedar en estado roto, presumiblemente debido a alguna secuencia de escape emitida por input()
.
He intentado una variedad de enfoques para solucionar este problema, el uso del módulo curses
y otros medios para restablecer el terminal antes de ejecutar exit
, para tratar de emular la corriente stdin
para salir por entregándola exit()
de entrada() (lamentablemente code.InteractiveConsole.push()
no funciona de esa manera, como se podría pensar), al intentar escribir mi propio input()
sin bloqueo usando threading
, pero no he podido juntar algo que funcione.
Here, here, here y here son conversaciones de problemas similares.
Finalmente, aquí es un caso de prueba reducida para demostrar el problema:
#!/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()
Para aquellos familiarizados con (Py) Qt, esto abrirá una ventana en blanco, y cuando está cerrado, la conexión de app
' La señal lastWindowClosed
provocará que se produzca una llamada a la función incorporada exit()
. Esto ocurre mientras el módulo code
está ejecutando una llamada al input()
para leer desde sys.stdin
. Y aquí, cuando cierro la ventana, escribir en la terminal después no muestra ninguno de los caracteres de los tipos.
Principalmente uso Python 3, y la aplicación real usa el código específico de Python 3, pero también he probado el caso de prueba en Python 2.7 y muestra el mismo problema.
No puedo reproducir el problema en Python26 Win7 de 64 bits. Si cierro el cuadro qt, la consola vuelve a mostrar el mensaje normal y puedo ingresar texto en él. – joaquin
Debería haber mencionado que estoy ejecutando esto en Linux (lo editaré para mencionarlo). El comportamiento del terminal probablemente difiere sustancialmente entre las plataformas. ¡Gracias por revisar, sin embargo! – Sho