Я пытаюсь использовать терминал из python VTE привязка (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. но результаты - та же консоль чистого linux (с некоторым предупреждением об отсутствующей графике).
Интересно, что вызывает такое непредсказуемое поведение (интерактивная консоль - вставляется против введенного текста, и это не задержка ... и интерактивная консоль не имеет ничего общего с терминальным объектом vte .. я думаю)
может кто-нибудь объяснить, что происходит? можно ли использовать термин VTE таким образом?
то, что букве "b" в выходных данных предшествует пробел, является еще одной странностью (всем последовательным строкам предшествует больше пробелов .. похоже, мне нужно отправить возврат каретки перед строкой.)
(аргумент метода lambda *a: True
get_text , который я использую, является фиктивным обратным вызовом, это некоторый SlotSelectedCallback .. для его объяснения я также был бы благодарен :) )