diff --git a/src/Solver/CommandLine.py b/src/Solver/CommandLine.py index f7f5627c58f2bb38a18a1d5a81ad550d1763e51c..b3614ca3538e92134743772dd6ae8c2d2ed83768 100644 --- a/src/Solver/CommandLine.py +++ b/src/Solver/CommandLine.py @@ -172,12 +172,13 @@ class CommandLineSolver(AbstractSolver): if not os.path.exists(exe): error = f"[ERROR] Path {exe} do not exists" - logger.info(error) + logger.warning(error) return error self._process.start( exe, args, ) + self._process.waitForStarted() return True @@ -191,7 +192,7 @@ class CommandLineSolver(AbstractSolver): if not os.path.exists(exe): error = f"[ERROR] Path {exe} do not exists" - logger.info(error) + logger.warning(error) return error self._process.start( @@ -212,37 +213,48 @@ class CommandLineSolver(AbstractSolver): if not os.path.exists(exe): error = f"[ERROR] Path {exe} do not exists" - logger.info(error) + logger.warning(error) return error self._process.start( exe, args, ) + self._process.waitForStarted() 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) - def _run_next(self, study): - self._step += 1 - if self._step < len(self._runs): - res = self._runs[self._step](study) - if res is not True: - self._output.put(res) - else: - self._status = STATUS.STOPED - def _finished(self, study, exit_code, exit_status): if self._output is not None: self._output.put(exit_code) + logger.debug( + "Process finished with " + + f"code: {exit_code}, status: {exit_status}" + ) + self._run_next(study) + def _run_next(self, study): + self._step += 1 + + if self._step >= len(self._runs): + self._status = STATUS.STOPED + return + + fn = self._runs[self._step] + res = fn(study) + + if res is not True: + self._output.put(res) + def run(self, study, process=None, output_queue=None): self._study = study @@ -255,7 +267,8 @@ class CommandLineSolver(AbstractSolver): # Connect / reconnect signal self._process.readyRead.connect(self._data_ready) self._process.finished.connect( - lambda c, s: self._finished(study, c, s)) + lambda c, s: self._finished(study, c, s) + ) # Prepare running step self._runs = [ @@ -265,6 +278,8 @@ class CommandLineSolver(AbstractSolver): ] self._step = 0 + self._status = STATUS.RUNNING + # Run first step res = self._runs[0](study) if res is not True: diff --git a/src/Solver/Mage.py b/src/Solver/Mage.py index a5ee1332cb550c5d820790099a472a50540730a4..8d3a8bfcac50edd6f9518a248722d8b9645b52b2 100644 --- a/src/Solver/Mage.py +++ b/src/Solver/Mage.py @@ -20,7 +20,7 @@ import os import logging import numpy as np -from tools import timer +from tools import timer, trace from Solver.CommandLine import CommandLineSolver from Checker.Mage import MageNetworkGraphChecker diff --git a/src/View/RunSolver/Window.py b/src/View/RunSolver/Window.py index 74190304102e1188c70bf703a1cde667614d388b..6067f5e12b9e21011b897dec7bdb13c151d7e710 100644 --- a/src/View/RunSolver/Window.py +++ b/src/View/RunSolver/Window.py @@ -273,6 +273,7 @@ class SolverLogWindow(PamhyrWindow): def _update_logs_all(self): while self._output.qsize() != 0: s = self._output.get() + if type(s) is str and "[ERROR]" in s: self._log(s, color="red") else: