2010-05-18 83 views
3

我正在開發用於重新編譯Linux內核的GUI。爲此,我需要從Python實現4-5個Linux命令。我使用Qt作爲GUI設計器。我已使用os.system()調用成功實施了這些命令。但輸出是在控制檯上獲得的。真正的問題是命令的輸出是一個需要幾乎20-25分鐘連續打印的清單。我們如何將這個控制檯輸出轉移到Qt中設計的文本框中。任何人都可以幫助我在Qt中使用源代碼實現setSource()操作作爲實時控制檯輸出。如何將Python控制檯輸出重定向到QTextBox

回答

5
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())) 

這所做的工作對我來說相當不錯。謝謝你們。

1

我主要處理wxPython,但是是http://diotavelli.net/PyQtWiki/Capturing_Output_from_a_Process的解決方案,將工作?

從頁面:

問題:你想運行一個進程 ,打印大量的信息到 控制檯,並顯示在 文本編輯器或瀏覽器的輸出,但結果 是一個GUI,凍結,直到 過程完成。

解決方案(許多可能的一個): 創建一個QProcess中的對象,其 信號連接到一些插槽類, 傳所需要的參數和 啓動它。過程的標準輸出 和stderr上的數據將傳送到您的插槽。

continued...

+0

偉大的幫助兄弟,它真的有我的東西。但我得到的只是關於Windows的窗口。我需要使用它進行系統調用。它關於執行一些程序與req arguments.but它是偉大的幫助兄弟,因爲我可以獲得實現應用程序界面的方式。謝謝 – Kris 2010-05-19 06:19:38

+0

再次嘗試併成功完成了兄弟。我用start()取代closeStdin()它順利地工作。謝謝 – Kris 2010-05-19 07:20:00

0

使用管道浮現在腦海。您可以使用後臺線程來讀取程序的輸出(並且每當添加新行時就將事件發送到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 
+0

這個想法是好的,但是問題是我知道如果線程能夠傳輸什麼到現在。因爲我不認爲我們有更新的時間差異。但我可以從NIck的上面找到答案。感謝您幫助我和iDog。 – Kris 2010-05-19 07:22:21

相關問題