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í :))

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top