Python VTE-Terminal Seltsamkeit
Frage
Ich versuche, das Terminal aus Python VTE Bindung (python-vte zu verwenden von debian Squeeze) als virtuelles Terminal-Emulator (nur für ANSI / Steuer Zeichen Textverarbeitung)
in der interaktiven Python-Konsole, sieht alles (fast) alles in Ordnung:
>>> import vte
>>> term = vte.Terminal()
>>> term.feed("a\nb")
>>> print repr(term.get_text(lambda *a: True).rstrip())
'a\n b'
jedoch startet diesen Code (wenig geändert) als Python-Skript wird anderes Ergebnis ergibt:
$ python vte_wiredness_1.py
''
seltsam genug, Einfügen des Code wieder in die (neue) interaktive Python-Session liefert auch leere Zeichenfolge:
>>> import vte
>>> term = vte.Terminal()
>>> term.feed("a\nb")
>>> print repr(term.get_text(lambda *a: True).rstrip())
''
>>>
als erstes caming auf meiner Meinung war, dass der einzige Unterschied zwischen den beiden Fällen ist der Zeitpunkt - es hatte eine gewisse Verzögerung, bevor get_text
sein. leider Schlaf preluding get_text
mit einigen Sekunden hat nicht geholfen
Dann dachte ich, es hat etwas mit X-Window-Umgebung zu tun hat. aber die Ergebnisse sind die gleiche reine Linux-Konsole (mit etwas Warnung auf fehlende Grafiken).
Ich frage mich, was bewirkt, dass ein solches unvorhersehbares Verhalten (interaktive Konsole - eingefügt vs eingegeben haben, und es ist nicht die Verzögerung .. ant die interaktive Konsole hat nichts mit dem vte Terminal-Objekt zu tun .. ich denke)
kann mir jemand erklären, was passiert ist? ist es möglich, die VTE Begriff solchen Art und Weise zu benutzen?
, dass die „b“ Buchstaben in der Ausgabe durch den Raum vorangestellt ist, ist eine weitere Seltsamkeit (alle aufeinander folgenden Zeilen von mehr Leerzeichen vorausgehen .. sieht aus wie ich vor dem String Wagenrücklauf senden.)
(die lambda *a: True
get_text Methode Argument ich bin verwendet, wird ein Dummy-Rückruf, es ist etwas SlotSelectedCallback .. für seine Erklärung, die ich wäre dankbar, wie gut :))
Lösung
.. Posting mir die Lösung, die ich habe an anderer Stelle gefunden
Problem war, dass ich Tatsache ignoriert, dass vte.Terminal ein gtk-Applet ist, so gtk Hauptschleife aufgerufen werden.
Beispiel für funktionierenden Code :
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()
dank Juhaz @ irc: //freenode.net/##gnome