Вопрос

Я пытаюсь использовать терминал из Python Власть Привязка (Python-VTE от Debian Squeeze) как эмулятор виртуального терминала (только для обработки текста ANSI / Control Chars)

В интерактивной консоли Python все выглядит (почти) в порядке:

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

Тем не менее, запустив этот код (мало изменен) в виде сценария Python, дается другой результат:

$ python vte_wiredness_1.py 
''

Как ни странно, вставлев код обратно в (новый) интерактивный сеанс Python, также дает пустую строку:

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

первое, что согревать на мой взгляд, заключалась в том, что единственная разница между двумя случаями - это время - должно быть некоторая задержка до get_text. Отказ К сожалению, пределе get_text С некоторыми секундами сна не помогли

Тогда я подумал, что это есть что связано с X Window Environment. Но результаты являются одинаковыми чистыми консолью Linux (с некоторым предупреждением о пропущенной графике).

Интересно, что вызывает такое непредсказуемое поведение (Interactive Console - вставленные против напечатаны, и это не задержка. Муравей, интерактивную консоль не имеет ничего общего с объектом терминала VTE ..

Может кто-то объяснить, что происходит? Можно ли использовать этот термин VTE такой путь?

То, что буква «B» в выходе предшествует пространство, является еще одной странностью (все последовательные линии предшествуют больше места .. Похоже, я должен отправить возврат каретки перед строкой.)

(то lambda *a: True get_text. Аргумент метода Я использую, это фиктивный обратный вызов, это немного SlotseletedCallback... Для его объяснения я был бы также благодарным :))

Это было полезно?

Решение

..Остивание себя решением, которое я нашел в другом месте

Проблема заключалась в том, что я игнорирую факт, что VTE.terminal - это апплет GTK, поэтому Главный цикл GTK должен быть вызван.

Пример рабочего кода:

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

Спасибо Juhaz @ IRC: //freenode.net/##gnome

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top