Python/PyQt/Qt线程:如何立即打印stdout/stderr?
我查了很多例子,也在StackOverflow上看了很多关于线程的问题,但还是搞不明白。
这是我正在使用的一些示例代码:
class Debugger(QTextBrowser):
def __init__(self, parent):
super(Debugger, self).__init__(parent)
sys.stdout = self
def write(self, text):
self.moveCursor(QTextCursor.End)
self.textCursor().insertText(text)
简单来说,我想捕捉任何'print'语句或者其他写入标准输出流的方式。但我无法做到逐个打印它们,而是等到打印字符串的那个过程结束后,才开始记录信息。那么,我该如何正确地使用线程呢?
编辑:把代码简化到最基本的部分。
1 个回答
0
我怀疑你是在一个线程里运行所有的代码吧?
当其他代码在运行时,Qt的主循环就没法运行了,所以它无法处理事件,比如在屏幕上绘图、接收输入等等。因此,虽然文本框内部在更新,但在屏幕上并不会显示出来,直到你的任务完成,然后窗口才会重新绘制。
最好的解决办法是把那些需要输出(而且耗时)的过程放到一个单独的线程里去运行。
一个简单粗暴的解决办法是,每当你往文本框里写东西时,手动让Qt的主循环运行一下,具体可以参考这个链接:IPython手动迭代主循环?。