2016-11-04 58 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() 

基本上放出来是字节,我不得不将其转换为字符串。它的工作如预期一样,但如果有人有更好的解决方案,我很乐意尝试。谢谢你们。