From 7d1e05f21d02805dec50008060464f98941111ff Mon Sep 17 00:00:00 2001 From: marioalexis Date: Sun, 7 Sep 2025 14:07:07 -0300 Subject: [PATCH 1/2] Fem: Better error handling in task panels with logging --- .../Fem/femtaskpanels/base_femlogtaskpanel.py | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/Mod/Fem/femtaskpanels/base_femlogtaskpanel.py b/src/Mod/Fem/femtaskpanels/base_femlogtaskpanel.py index 5c37d7ceb2..740ad10566 100644 --- a/src/Mod/Fem/femtaskpanels/base_femlogtaskpanel.py +++ b/src/Mod/Fem/femtaskpanels/base_femlogtaskpanel.py @@ -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() From 7387fc22101c4475fa002da9962747594527c87a Mon Sep 17 00:00:00 2001 From: marioalexis Date: Thu, 11 Sep 2025 18:27:21 -0300 Subject: [PATCH 2/2] Fem: Force utf8 encoding for Netgen Python process --- src/Mod/Fem/femmesh/netgentools.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Mod/Fem/femmesh/netgentools.py b/src/Mod/Fem/femmesh/netgentools.py index 96ddd28c56..1ca99f430c 100644 --- a/src/Mod/Fem/femmesh/netgentools.py +++ b/src/Mod/Fem/femmesh/netgentools.py @@ -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()