簡體   English   中英

Python / PyQt / Qt線程:如何立即打印stdout / stderr?

[英]Python/PyQt/Qt Threading: How do I print stdout/stderr right away?

我使用了一堆我用Google搜索過的示例,並在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'語句或其他形式的寫入stdoutstream。 但是當它們到達時我無法一個接一個地打印它們。 相反,它等待打印字符串的任何進程完成,然后開始記錄信息。 那么我該如何正確地解決這個問題?

編輯:將代碼減少到最低限度。

我懷疑你是在一個線程中運行它?

當其他代碼運行時,Qt主循環沒有被運行,因此它不處理事件(在屏幕上繪圖,接受輸入等)。 因此,當文本框內部正在更新時,它不會在屏幕上繪制,直到您的任務完成,然后重新繪制窗口。

最好的解決方案是在單獨的線程中運行正在輸出(並花費一些時間)的進程。

一個快速骯臟的解決方案是每當你向文本框寫入內容時手動迭代Qt 主循環 ,請參閱IPython手動迭代主循環?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM