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

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top