蟒蛇VTE终端古怪

时间:2010-05-19 19:24:32

标签: python terminal gnome vte

我正在尝试使用来自python VTE绑定的终端(来自debian squeeze的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 ..对于它的解释我也要感激:))< / p>

1 个答案:

答案 0 :(得分:3)

..发布自己在别处找到的解决方案

问题是我忽略了vte.Terminal是一个gtk小程序的事实,因此必须调用gtk主循环。

example of working code

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