Ausgabe von Prozess bei startDetached abfangen
Verfasst: Sonntag 24. Mai 2020, 13:04
Da mein Programm etwas komplizierter ist, habe ich folgenden Beispielcode geschrieben, um mein Problem darzustellen:
Das Programm nimmt den Output eines Prozesses (in diesem Beispiel ping) und zeigt ihn in einem Textfeld an. Mein Problem dabei ist, das der Prozess (im Beispiel also ping) beendet wird, wenn das Programm geschlossen wird. Das möchte ich gerne verhindern. Dazu habe ich die Funktion startDetached gefunden. Wenn ich start durch startDetached ersetze, läuft der Prozess auch noch weiter, wenn das Programm geschlossen wird. Ich kann allerdings den Output nicht mehr abfangen. Dieser landet in der Konsole. Wie löse ich das Problem?
Code: Alles auswählen
from PyQt5.QtWidgets import QPlainTextEdit, QTabWidget, QWidget, QPushButton, QApplication
from PyQt5.QtCore import QProcess
import subprocess
import sys
class GameOutputTab(QPlainTextEdit):
def dataReady(self):
cursor = self.textCursor()
cursor.movePosition(cursor.End)
cursor.insertText(bytes(self.process.readAll()).decode(encoding=sys.stdout.encoding,errors="replace"))
self.ensureCursorVisible()
def executeCommand(self):
self.setReadOnly(True)
self.process = QProcess(self)
self.process.readyRead.connect(self.dataReady)
self.process.start("ping",["example.com"])
class TabWindow(QTabWidget):
def setup(self):
widget = QWidget()
button = QPushButton("Klick mich!",widget)
button.clicked.connect(self.runGame)
self.addTab(widget,"General")
self.show()
def runGame(self):
output = GameOutputTab()
tabid = self.addTab(output,"Output")
self.setCurrentIndex(tabid)
output.executeCommand()
app = QApplication(sys.argv)
tabs = TabWindow()
tabs.setup()
sys.exit(app.exec_())