从IPython捕获stdout时损坏/乱码输出

时间:2014-01-31 20:25:40

标签: python ipython

在这里问了一个类似的问题:ipython redirect stdout display corruption,但答案并不令人满意。

我尝试做的是捕获标准输出,将其写入PyQt4 QEditText,同时将其正常发送到终端。

我使用的是python 2.7和Ubuntu 12.04 LTS。

问题是当我在程序中嵌入一个IPython终端时,终端输出文本会出现乱码并且我失去了自动完成功能。

我能够在我的Ubuntu机器上非常简单地重现这个问题(这个问题似乎不存在于Windows上)。

在我的ubuntu termianl中:

ipython 
import IPython.utils.io
tee = IPython.utils.io.Tee('fds')  

就在这里,只需尝试使用Tee对象,文本就会出现乱码。

在我的程序中,我做的事情略有不同,但它归结为用自定义对象覆盖sys.stdout然后当调用write或flush时我记录捕获的文本并将其发送回原始标准输出和PyQt4 GUI。


那么,每当调用write或flush命令时,有没有办法安全地查看标准输出?有没有办法做到这一点,并没有打破IPython终端?

1 个答案:

答案 0 :(得分:0)

这是由于终端中文本着色的特殊编码。尝试使用'ipython --classic'。