From fdbf82d8d7bd1f3852fb45f6b7803824daeb075f Mon Sep 17 00:00:00 2001 From: Miguel Angel Ajo Pelayo Date: Thu, 16 Jan 2025 23:38:29 +0100 Subject: [PATCH] Handle timeout in subprocess call --- .../shell/jumpstarter_driver_shell/driver.py | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/contrib/drivers/shell/jumpstarter_driver_shell/driver.py b/contrib/drivers/shell/jumpstarter_driver_shell/driver.py index 781f4647..bdec1f21 100644 --- a/contrib/drivers/shell/jumpstarter_driver_shell/driver.py +++ b/contrib/drivers/shell/jumpstarter_driver_shell/driver.py @@ -41,14 +41,18 @@ def call_method(self, method: str, env, *args): raise ValueError(f"Method '{method}' not found in available methods: {list(self.methods.keys())}") script = self.methods[method] logger.debug(f"running script: {script}") - result = self._run_inline_shell_script(method, script, *args, env_vars=env) - if result.returncode != 0: - logger.info(f"{method} return code: {result.returncode}") - if result.stderr != "": - logger.debug(f"{method} stderr:\n{result.stderr.rstrip("\n")}") - if result.stdout != "": - logger.debug(f"{method} stdout:\n{result.stdout.rstrip("\n")}") - return result.stdout, result.stderr, result.returncode + try: + result = self._run_inline_shell_script(method, script, *args, env_vars=env) + if result.returncode != 0: + logger.info(f"{method} return code: {result.returncode}") + if result.stderr != "": + logger.debug(f"{method} stderr:\n{result.stderr.rstrip("\n")}") + if result.stdout != "": + logger.debug(f"{method} stdout:\n{result.stdout.rstrip("\n")}") + return result.stdout, result.stderr, result.returncode + except subprocess.TimeoutExpired as e: + logger.error(f"Timeout expired while running {method}: {e}") + return "", f"Timeout expired while running {method}: {e}", 199 def _run_inline_shell_script(self, method, script, *args, env_vars=None): """