簡體   English   中英

如何將Python控制台輸出重定向到QTextBox

[英]How to Redirect a Python Console output to a QTextBox

我正在開發一個用於重新編譯Linux內核的GUI。 為此,我需要從Python實現4-5個Linux命令。 我使用Qt作為GUI設計師。 我已經使用os.system()調用成功實現了命令。 但輸出是在控制台獲得的。 真正的問題是命令的輸出是一個列表,需要幾乎20-25分鍾的連續打印。 我們如何將此控制台輸出傳輸到Qt中設計的文本框。 任何人都可以幫助我在Qt中使用source作為實時控制台輸出來實現setSource()操作。

self.process = QProcess()
self.connect(self.process, SIGNAL("readyReadStdout()"), self.readOutput)
self.connect(self.process, SIGNAL("readyReadStderr()"), self.readErrors)
tarsourcepath="sudo tar xvpf "+ self.path1
self.process.setArguments(QStringList.split(" ",tarsourcepath))
self.process.start()



def readOutput(self):

    self.textBrowser2.append(QString(self.process.readStdout()))
    if self.process.isRunning()==False:
        self.textBrowser2.append("\n Completed Successfully")




def readErrors(self):
    self.textBrowser2.append("error: " + QString(self.process.readLineStderr()))

這對我來說非常有用。 謝謝你們。

我主要處理wxPython,但http://diotavelli.net/PyQtWiki/Capturing_Output_from_a_Process一個可行的解決方案?

從頁面:

問題:您希望運行一個向控制台輸出大量信息並在文本編輯器或瀏覽器中顯示輸出的進程,但結果是一個凍結的GUI,直到該過程完成。

解決方案(許多可能之一):創建一個QProcess對象,將其信號連接到類中的某些插槽,傳遞所需的參數並啟動它。 進程的stdout和stderr上的數據將傳遞到您的插槽。

繼續...

想到使用管道。 您可以使用后台線程來讀取程序的輸出(並在添加新行時將事件發送到GUI)。

所以基本的想法是這樣的:

os.chdir("/usr/src/linux-2.6.34")

p = os.popen("make", "r")
try:
    while True:
        line = p.readline()
        if not line:
            break

        # Replace this with a GUI update event (don't know anything about Qt, sorry)
        print line
finally:
    # Cf. http://docs.python.org/library/os.html#os.popen
    programReturnValue = p.close() or 0

暫無
暫無

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

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