2

我正在尝试使用来自 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 .. 对于它的解释,我也将不胜感激:))

4

1 回答 1

3

..向自己发布我在其他地方找到的解决方案

问题是我忽略了 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

于 2010-05-21T09:36:17.517 回答