rareza pitón TEV Terminal
Pregunta
Estoy tratando de utilizar el terminal de pitón TEV vinculante (python-VTE de squeeze debian) como un emulador de terminal virtual (sólo para ANSI / caracteres de control de procesamiento de texto)
en la consola Python interactiva, todo parece (casi) todo bien:
>>> import vte
>>> term = vte.Terminal()
>>> term.feed("a\nb")
>>> print repr(term.get_text(lambda *a: True).rstrip())
'a\n b'
Sin embargo, el lanzamiento de este código (poco modificado) como script en Python, se produjo resultado diferente:
$ python vte_wiredness_1.py
''
curiosamente, pegando la espalda código en el (nuevo) pitón sesión interactiva también rinde cadena vacía:
>>> import vte
>>> term = vte.Terminal()
>>> term.feed("a\nb")
>>> print repr(term.get_text(lambda *a: True).rstrip())
''
>>>
Lo primero que caming en mi mente era que la única diferencia entre los dos casos es el momento - tenía que haber alguna demora antes get_text
. Por desgracia, preludio get_text
con algún segundo sueño no ayuda
Entonces pensé que tiene algo que ver con el sistema X window. pero los resultados son los mismos consola de Linux puro (con un poco de advertencia en los gráficos que falta).
Me pregunto lo que provoca un comportamiento impredecible (consola interactiva - pegado vs escrito, y no es el retraso .. hormiga de la consola interactiva no tiene nada que ver con el objeto terminal TEV .. supongo)
Puede alguien explicar lo que está sucediendo? ¿es posible utilizar el TEV plazo tales camino?
que la letra "b" en la salida es precedido por el espacio, es otro extraño (todas las líneas consecutivas son precedidos por espacios más .. parece que tengo que enviar de retorno de carro antes de la cadena.)
( get_text argumento de un método lambda *a: True
estoy utilizando es una devolución de llamada ficticia, es cierto SlotSelectedCallback por su .. explicación le agradecería así :))
Solución
.. publicar mi mismo la solución que he encontrado en otros lugares
problema era que i estaba ignorando hecho de que vte.Terminal es un applet GTK, bucle de modo gtk principal tiene que ser llamado.
ejemplo de código de trabajo :
import gtk
import vte
term = vte.Terminal()
term.feed("a\r\nb")
def get_text(term):
print repr(term.get_text(lambda *a: True).rstrip())
gtk.main_quit()
term.connect('contents-changed', get_text)
gtk.main()
gracias Juhaz @ IRC: //freenode.net/##gnome