diff --git a/src/Solver/CommandLine.py b/src/Solver/CommandLine.py index 86b324428421698efc1b78e418ec5db0d675a779..c72cf7353f7f2c98f17843331aeeb6ecea4ee9ac 100644 --- a/src/Solver/CommandLine.py +++ b/src/Solver/CommandLine.py @@ -20,7 +20,7 @@ import os import logging from datetime import datetime -from tools import timer, parse_command_line, get_version +from tools import timer, parse_command_line, get_version, logger_exception try: # Installation allow Unix-like signal @@ -271,12 +271,15 @@ class CommandLineSolver(AbstractSolver): return True def _data_ready(self): - # Read process output and put lines in queue - s = self._process.readAll().data().decode() - - if self._output is not None: - for x in s.split('\n'): - self._output.put(x) + try: + # Read process output and put lines in queue + s = self._process.readAll().data().decode('utf-8', "replace") + + if self._output is not None: + for x in s.split('\n'): + self._output.put(x) + except Exception as e: + logger_exception(e) def _finished(self, study, exit_code, exit_status): if self._output is not None: diff --git a/src/View/RunSolver/Window.py b/src/View/RunSolver/Window.py index dc1141d6bb62a0f0ee68f617a0348e2dc122d6e4..6c55ea6a4610a4274e0581b23b9e9dc41b6fd73c 100644 --- a/src/View/RunSolver/Window.py +++ b/src/View/RunSolver/Window.py @@ -296,10 +296,13 @@ class SolverLogWindow(PamhyrWindow): while self._output.qsize() != 0: s = self._output.get() - if type(s) is str and "[ERROR]" in s: - self._log(s, color="red") - else: - self._log(s) + try: + if type(s) is str and "[ERROR]" in s: + self._log(s.encode("utf-8"), color="red") + else: + self._log(s) + except Exception as e: + logger_exception(e) #################### # Process controle #