Merge pull request #23729 from marioalexis84/fem-loggin_error

Fem: Better error handling in task panels with logging
This commit is contained in:
Chris Hennes
2025-09-24 22:44:44 -05:00
committed by GitHub
2 changed files with 24 additions and 5 deletions

View File

@@ -124,7 +124,7 @@ class NetgenTools:
def compute(self):
env = QProcessEnvironment.systemEnvironment()
self.process.setProcessEnvironment(env)
self.process.start(self._get_python_exe(), ["-E", self.script_file])
self.process.start(self._get_python_exe(), ["-X", "utf8", "-E", self.script_file])
return self.process
@@ -422,7 +422,7 @@ except:
pass
"""
p = QProcess()
p.start(NetgenTools._get_python_exe(), ["-c", script])
p.start(NetgenTools._get_python_exe(), ["-E", "-c", script])
p.waitForFinished()
info = p.readAll().data().decode()

View File

@@ -79,6 +79,16 @@ class _BaseLogTaskPanel(base_femtaskpanel._BaseTaskPanel, ABC):
def setup_connections(self):
QtCore.QObject.connect(self._thread, QtCore.SIGNAL("started()"), self.thread_started)
QtCore.QObject.connect(self._thread, QtCore.SIGNAL("finished()"), self.thread_finished)
QtCore.QObject.connect(
self.tool.process,
QtCore.SIGNAL("errorOccurred(QProcess::ProcessError)"),
self.process_failed,
)
QtCore.QObject.connect(
self.tool.process,
QtCore.SIGNAL("errorOccurred(QProcess::ProcessError)"),
self.stop_timer,
)
QtCore.QObject.connect(self.tool.process, QtCore.SIGNAL("started()"), self.process_started)
QtCore.QObject.connect(
self.tool.process,
@@ -130,13 +140,22 @@ class _BaseLogTaskPanel(base_femtaskpanel._BaseTaskPanel, ABC):
return
self.tool.update_properties()
self.write_log("Process finished\n", QtGui.QColor(getOutputWinColor("Text")))
else:
self.write_log("Process crashed\n", QtGui.QColor(getOutputWinColor("Error")))
def process_started(self):
QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
self.write_log("Start process...\n", QtGui.QColor(getOutputWinColor("Text")))
def process_failed(self, error):
match error:
case QtCore.QProcess.ProcessError.FailedToStart:
self.write_log(
"Process failed to start\n", QtGui.QColor(getOutputWinColor("Error"))
)
case QtCore.QProcess.ProcessError.Crashed:
self.write_log("Process crashed\n", QtGui.QColor(getOutputWinColor("Error")))
case _:
self.write_log("Process failed\n", QtGui.QColor(getOutputWinColor("Error")))
def write_output(self):
self.write_log(
self.tool.process.readAllStandardOutput().data().decode("utf-8"),
@@ -216,7 +235,7 @@ class _BaseLogTaskPanel(base_femtaskpanel._BaseTaskPanel, ABC):
def update_timer_text(self):
self.text_time.setText(f"Time: {self.elapsed.elapsed()/1000:4.1f} s")
def stop_timer(self, code, status):
def stop_timer(self, *reason):
self.timer.stop()
QtGui.QApplication.restoreOverrideCursor()