我有一个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和...
您必须使用QProcess的write()
方法: