2016-11-04 63 views
0

我是系統管理員,這是我第一次嘗試使用Python實現某些功能。我正在研究一個可以在Qthread中運行bat文件的小型python工具。在GUI上,我有一個textedit框,我想從bat文件更新輸出/錯誤。更新從Qthread到Gui的bat文件輸出

這裏是我的代碼到目前爲止,

的QThread -

class runbat(QtCore.QThread): 
    line_printed = QtCore.pyqtSignal(str) 
    def __init__(self,): 
     super(runbat, self).__init__() 
    def run(self): 
     popen = subprocess.Popen("install.bat", stdout=subprocess.PIPE, shell=True) 
     lines_iterator = iter(popen.stdout.readline, b"") 
     for line in lines_iterator: 
     self.line_printed.emit(line) 

從主 -

self.batfile.line_printed.connect(self.batout) 

def batout(self, line): 
    cursor = self.ui.textEdit.textCursor() 
    cursor.movePosition(cursor.End) 
    cursor.insertText(line) 
    self.ui.textEdit.ensureCursorVisible() 

,但我得到 - 類型錯誤:runbat.line_printed [STR]。 emit():參數1具有意外的類型'字節'。另一個問題是stdout是否捕獲錯誤或者只是輸出,我還需要什麼來捕獲錯誤?

回答

0

好吧,我能夠通過將代碼更改爲以下來使其工作。

中的QThread

line_printed = QtCore.pyqtSignal(bytes) 

在主

def batout(self, line): 
    output = str(line, encoding='utf-8') 
    cursor = self.ui.textEdit.textCursor() 
    cursor.movePosition(cursor.End) 
    cursor.insertText(output) 
    self.ui.textEdit.ensureCursorVisible() 

基本上放出來是字節,我不得不將其轉換爲字符串。它的工作如預期一樣,但如果有人有更好的解決方案,我很樂意嘗試。謝謝你們。