python VTE终端怪异

python VTE终端怪异,python,terminal,gnome,vte,Python,Terminal,Gnome,Vte,我正在尝试使用python绑定的终端(debian squeeze的python vte)作为虚拟终端仿真器(仅用于ANSI/control chars文本处理) 在交互式python控制台中,一切看起来(几乎)正常: >>> import vte >>> term = vte.Terminal() >>> term.feed("a\nb") >>> print repr(term.get_text(lambda *a: T

我正在尝试使用python绑定的终端(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
之前必须有一些延迟。不幸的是,预先设定几秒钟的睡眠时间并没有帮助

然后我认为它与X窗口环境有关。但是结果是相同的纯linux控制台(对于缺少的图形有一些警告)

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

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

输出中的“b”字母前面有空格,这是另一个奇怪的现象(所有连续的行前面都有更多的空格..看起来我必须在字符串之前发送回车。)


(我使用的
lambda*a:True
方法参数是一个伪回调,它是一些..对于它的解释,我也将不胜感激:)

。将我在别处找到的解决方案发布给自己

问题是我忽略了vte.Terminal是gtk小程序的事实,所以必须调用gtk主循环

:


谢谢Juhaz@irc://freenode.net/##gnome

运行
gtk.main\u quit()
如何解决此问题?我的GUI冻结了.Oleg,
gtk.main()
解决了这个问题-
gtk.main\u quit()是终止主事件循环所必需的。但是没有GUI,我不知道你是什么意思。谢谢你对这个老问题的回答。在我的例子中,我实际上使用的是GUI。我想在终端内容更改时将其输出到一个文件中,但似乎没有经常调用
内容更改
信号,并且我附加最后一个非空行的方法导致文件中省略了一些行。我认为这个问题是类似的。
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()