更新从Qthread到Gui的bat文件输出

时间:2016-11-04 23:20:46

标签: python batch-file pyqt4 popen qthread

我是系统管理员,这是我第一次尝试使用Python实现某些功能。我正在研究一个小型python工具,它将在Qthread中运行bat文件。在GUI上我有一个textedit框,我想要更新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)

来自main -

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

但我得到了 - TypeError:runbat.line_printed [str] .emit():参数1有意外类型' bytes'。另一个问题是stdout是否捕获错误或仅输出,我还需要捕获错误吗?

1 个答案:

答案 0 :(得分: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()

基本上输出是以字节为单位,我不得不将其转换为字符串。它的工作正如预期的那样改变,但如果有人有更好的解决方案,我很乐意尝试。谢谢大家。