我正在尝试使用来自 python VTE绑定的终端(来自 debian 挤压的 python-vte)作为虚拟终端模拟器(仅用于 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窗口环境有关。但结果是相同的纯 linux 控制台(缺少图形时有一些警告)。
我想知道是什么导致了这种不可预测的行为(交互式控制台 - 粘贴与键入,这不是延迟..交互式控制台与 vte 终端对象无关..我猜)
有人可以解释发生了什么吗?是否可以这样使用 VTE 术语?
输出中的“b”字母前面有空格,这是另一个奇怪的地方(所有连续的行前面都有更多的空格..看起来我必须在字符串之前发送回车。)
(我使用的lambda *a: True
get_text方法参数是一个虚拟回调,它是一些SlotSelectedCallback .. 对于它的解释,我也将不胜感激:))