я пытаюсь использовать терминал из привязки python VTE (python-vte из debian ) как эмулятор виртуального терминала (только для обработки текста ANSI/управляющих символов)
в интерактивной консоли 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
1Vte
1Terminal.html#a5ea58027108d5c27d51882a8b1392e44" rel="nofollow noreferrer">get_text, который я использую, является фиктивный обратный вызов, это какой-то 1slot.html" rel="nofollow noreferrer">SlotSelectedCallback.. за его объяснение i' буду тоже благодарен))>>> import vte
>>> term = vte.Terminal()
>>> term.feed("a\nb")
>>> print repr(term.get_text(lambda *a: True).rstrip())
'a\n b'