beschäftige mich gerade mit QProcess.
Dazu habe ich folgenden Code:
Code: Alles auswählen
import sys
from PyQt5.QtWidgets import (
QApplication
)
from PyQt5.QtCore import (
QProcess
)
class OpenApplication(object):
def __init__(self, cmd=None, args=[]):
super().__init__()
self.p = None
if not cmd or args == []:
return
self.start_process(cmd, args)
sys.exit()
def start_process(self, cmd, args):
self.p = QProcess()
self.p.readyReadStandardOutput.connect(self.handle_stdout)
self.p.readyReadStandardError.connect(self.handle_stderr)
self.p.stateChanged.connect(self.handle_state)
self.p.finished.connect(self.process_finished)
self.p.setProgram(cmd)
self.p.setArguments(args)
self.p.start()
self.p.waitForStarted()
self.p.waitForFinished()
def handle_stderr(self):
data = self.p.readAllStandardError()
stderr = bytes(data).decode("utf8")
def handle_stdout(self):
data = self.p.readAllStandardOutput()
stdout = bytes(data).decode("utf8")
def handle_state(self, state):
states = {
QProcess.NotRunning: 'Not running',
QProcess.Starting: 'Starting',
QProcess.Running: 'Running',
}
state_name = states[state]
print(f"State changed: {state_name}")
def process_finished(self, exitCode, exitStatus):
print(f'process finished: {exitCode}, {exitStatus}')
self.p = None
def main(cmd=None, args=[]):
app = QApplication(sys.argv)
w = OpenApplication(cmd, args=args)
app.exec_()
filepath = '/path to/my_program.py'
main(cmd='python3.12', args=[filepath])
Code: Alles auswählen
State changed: Starting
State changed: Running
State changed: Not running
process finished: 0, 0
Code: Alles auswählen
State changed: Starting
State changed: Running
QProcess: Destroyed while process ("python3.12") is still running.
Freue mich auch über weiteren Input dazu!
Grüße Nobuddy