Странная странность Python VTE
Вопрос
Я пытаюсь использовать терминал из 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