我正在尝试使用来自python VTE binding的终端(来自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 window环境有关。但结果是相同的纯linux控制台(对丢失的图形进行了一些警告)。
我想知道是什么导致了这种不可预测的行为(交互式控制台-粘贴与键入,而不是延迟..ant交互式控制台与vte终端对象无关。我想)
有人能解释一下发生了什么吗?可以这样使用VTE术语吗?
输出中的"b“字母前面是空格,这是另一个奇怪之处(所有连续的行前都有更多的空格。看起来我必须在字符串之前发送回车符。)
(我正在使用的lambda *a: True get_text方法参数是一个虚拟回调,它是一些SlotSelectedCallback。对于它的解释,我也很感激:) )
发布于 2010-05-21 17:36:18
..posting我在别处找到的解决方案
问题是我忽略了vte.Terminal是一个gtk applet的事实,所以必须调用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
https://stackoverflow.com/questions/2868694
复制相似问题