我正在尝试使用Python的终端 VTE 绑定(来自Debian Squeeze的Python-VTE)作为虚拟终端模拟器(仅适用于ANSI/Control Chars文本处理)

在交互式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控制台(关于缺少图形的警告)。

我想知道是什么导致这种不可预测的行为(交互式控制台 - 粘贴VS键入,这不是延迟。.ant交互式控制台与VTE终端对象无关。我猜)

有人可以解释发生了什么吗?是否可以这样使用VTE术语?

输出中的“ B”字母在空间之前,是另一个陌生度(所有连续的线都有更多的空间。看起来我必须在字符串之前发送托架返回。)

(这 lambda *a: True get_text 我正在使用的方法参数是虚拟回调,这是一些 slotselectedCallback..对于它的解释,我也要感激:))

有帮助吗?

解决方案

..让自己安置我在其他地方找到的解决方案

问题是我忽略了VTE.端子是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()

谢谢

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top