在 PyQt 中使用子线程读取子进程 Python 脚本的 print 输出流内容。
问题所在:
如果模块都由自己开发, 正常操作
但是因为不能改,所以只能拦截:
代码:
pythonPath = self.pythonPath_cb.currentText()
if suffix == "py":
# 首次
self.pyCommand = [pythonPath, path]
self.modifiedReloadPython(path)
def modifiedReloadPython(self, path_):
os.chdir(os.path.dirname(path_))
# 子进程调用
self.p = subprocess.Popen(self.pyCommand, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
# self.stdoutWorker.p = self.p
self.stdoutWorker = Worker(self.p)
self.stdoutWorker.stdout_signal.connect(lambda x: self.error_te.append("PYDEBUG:\n" + x))
self.stdoutWorker.start()
class Worker(QThread):
stdout_signal = pyqtSignal(str)
def __init__(self, p, parent=None):
super().__init__(parent)
self.p = p
def run(self):
while True:
QApplication.processEvents()
if self.p is not None:
line = self.p.stdout.readline()
# line = line.strip()
if line != b'':
try:
info = line.decode()
self.stdout_signal.emit(info)
except:
self.stdout_signal.emit(repr(line))
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 PyQt!