Question

Je suis en train d'utiliser le terminal de python TEV de liaison (python-vte Squeeze debian) comme un émulateur de terminal virtuel (juste pour le traitement de texte ANSI / caractères de contrôle)

dans la console python interactif, tout semble (presque) tout droit:

>>> import vte
>>> term = vte.Terminal()
>>> term.feed("a\nb")
>>> print repr(term.get_text(lambda *a: True).rstrip())
'a\n b'

Cependant, le lancement de ce code (peu modifié) en tant que script python, résultat différent est donné:

$ python vte_wiredness_1.py 
''

assez étrangement, coller le dos de code dans la (nouvelle) session de python interactive donne également une chaîne vide:

>>> import vte
>>> term = vte.Terminal()
>>> term.feed("a\nb")
>>> print repr(term.get_text(lambda *a: True).rstrip())
''
>>>

première caming chose dans mon esprit était que la seule différence entre les deux cas est le moment - il devait y avoir un certain retard avant get_text. malheureusement, préluder get_text avec un peu de sommeil secondes n'a pas aidé

alors je pensais qu'il a quelque chose à voir avec l'environnement X Window. mais les résultats sont la même console Linux pur (avec un avertissement sur les graphiques manquants).

Je me demande ce qui cause un tel comportement imprévisible (console interactive - vs typé collé, et ce n'est pas le retard .. ant la console interactive n'a rien à voir avec l'objet terminal vte .. je suppose)

quelqu'un peut-il expliquer ce qui se passe? est-il possible d'utiliser le terme TEV de telle sorte?

que la lettre « b » dans la sortie est précédée par l'espace, est une autre bizarrerie (toutes les lignes consécutives sont précédées d'espaces plus .. On dirait que je dois envoyer un retour chariot avant la chaîne.)

(l'argument de la méthode lambda *a: True get_text je suis utilise est un rappel factice, il est est une SlotSelectedCallback .. pour son explication que je serais reconnaissant aussi bien :))

Était-ce utile?

La solution

.. me affichage de la solution que j'ai trouvé ailleurs

problème était que j'ignorais que vte.Terminal est une applet gtk, boucle principale si gtk doit être appelé.

exemple de code de travail :

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()

merci Juhaz @ irc: //freenode.net/##gnome

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top