我是系统管理员,这是我第一次尝试使用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是否捕获错误或仅输出,我还需要捕获错误吗?
答案 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()
基本上输出是以字节为单位,我不得不将其转换为字符串。它的工作正如预期的那样改变,但如果有人有更好的解决方案,我很乐意尝试。谢谢大家。