From 2906c697de25674d689f10a5a98ca462b3e23e43 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Mon, 23 Feb 2026 10:26:59 +0100 Subject: [PATCH] jw.pkg.lib.util.run_cmd(): Add stderr to exception If an error happens, append stderr to the exception thrown. Signed-off-by: Jan Lindemann --- src/python/jw/pkg/lib/util.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/python/jw/pkg/lib/util.py b/src/python/jw/pkg/lib/util.py index d1f61ea3..edfb638c 100644 --- a/src/python/jw/pkg/lib/util.py +++ b/src/python/jw/pkg/lib/util.py @@ -20,7 +20,7 @@ def pretty_cmd(cmd: list[str], wd=None): if token.find(' ') != -1: token = '"' + token + '"' tokens.append(token) - ret = '>' + ' '.join(tokens) + '<' + ret = ' '.join(tokens) if wd is not None: ret += f' in {wd}' return ret @@ -60,15 +60,17 @@ async def run_cmd( want_bytes = (output_encoding == "bytes") - def __log(prio, *args): + def __log(prio, *args, verbose=verbose): if verbose: log(prio, "|", *args) - def __check_exit_code(code): - if code != 0 and (throw or verbose): - msg = f'Command returned error {code}: {pretty_cmd(args, wd)}' - if verbose: - __log(ERR, msg) + def __check_exit_code(code: int, stdout=None, stderr=None): + if code == 0: + return + if (throw or verbose): + msg = f'Command returned error {code}: {pretty_cmd(args, wd)}: ' + if stderr: + msg += stderr.strip() if throw: raise RuntimeError(msg) @@ -188,7 +190,8 @@ async def run_cmd( exit_code = await proc.wait() await asyncio.gather(*tasks) - __check_exit_code(exit_code) + if want_bytes: + __check_exit_code(exit_code) stdout_b = b"".join(stdout_parts_b) if stdout_parts_b else None stderr_b = b"".join(stderr_parts_b) if stderr_parts_b else None @@ -205,6 +208,10 @@ async def run_cmd( stdout_s = stdout_b.decode(stdout_dec_enc, errors="replace") if stdout_b is not None else None stderr_s = stderr_b.decode(stderr_dec_enc, errors="replace") if stderr_b is not None else None + + if not want_bytes: + __check_exit_code(exit_code, stdout=stdout_s, stderr=stderr_s) + return stdout_s, stderr_s finally: