PyQt5如何从QProcess读取/写入QProcess

问题描述 投票:0回答:1

我有一个PyQt5 GUI应用程序,想执行一个外部程序,并在QTextEdit小部件上显示该外部程序的stdout,stderr和stdin。我已经为stdout和stderr做到了。我需要外部流程标准输入的帮助。

想象以下片段

       self.te = QTextEdit(self)
       self.te.move(self.x0, 150)
       self.te.resize(self.mainWinWidth - 100, self.mainWinHeight - 200)

以及使QProcess运行的代码段...

      self.process = QtCore.QProcess(self)
      self.process.setProcessChannelMode( QProcess.MergedChannels )
      self.process.readyRead.connect(self.readReady)
      # ... and elsewhere I start the sub process like
      os.environ["PYTHONUNBUFFERED"] = "1"
      self.process.start('./goo', [])

和readReady()实现为:

    def readReady(self):
        cursor = self.te.textCursor()
        cursor.movePosition(cursor.End)
        cursor.insertText(str(self.process.readAll(), 'utf-8'))
        self.te.ensureCursorVisible()

并且goo(1)是实现为]的基本子过程>

#!/usr/bin/python3

import time
import sys

for i in range(0,5):
    print(f"============ {i} ===")
    time.sleep(1)

sys.stderr.write("Testing stderr...\n")
print("Enter name:")
name = sys.stdin.readline()
print(f"Got {name}")

话虽如此,我确实看到stdout和stderr都工作正常。我还看到“输入名称:”,但是当我在QTextEdit上输入“ joe”或“ moe”时,什么也没发生,即后端子进程仍在等待。

所以似乎我需要一个事件处理程序进行写入。那就是当子进程(通过QProcess)在其标准输入上等待输入时,我需要检测到该信息,并以某种方式从QTextEdit(从用户)读取该输入,然后将其馈送到子进程(即,写入其标准输入)。

考虑ssh或telnet或xterm。架子小部件上没有这个吗?

我有一个PyQt5 GUI应用程序,想执行一个外部程序,并在QTextEdit小部件上显示该外部程序的stdout,stderr和stdin。我已经为stdout和...

python pyqt pyqt5
1个回答
0
投票

您必须使用QProcess的write()方法:

© www.soinside.com 2019 - 2024. All rights reserved.