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 <jan@janware.com>
This commit is contained in:
Jan Lindemann 2026-02-23 10:26:59 +01:00
commit 2906c697de

View file

@ -20,7 +20,7 @@ def pretty_cmd(cmd: list[str], wd=None):
if token.find(' ') != -1: if token.find(' ') != -1:
token = '"' + token + '"' token = '"' + token + '"'
tokens.append(token) tokens.append(token)
ret = '>' + ' '.join(tokens) + '<' ret = ' '.join(tokens)
if wd is not None: if wd is not None:
ret += f' in {wd}' ret += f' in {wd}'
return ret return ret
@ -60,15 +60,17 @@ async def run_cmd(
want_bytes = (output_encoding == "bytes") want_bytes = (output_encoding == "bytes")
def __log(prio, *args): def __log(prio, *args, verbose=verbose):
if verbose: if verbose:
log(prio, "|", *args) log(prio, "|", *args)
def __check_exit_code(code): def __check_exit_code(code: int, stdout=None, stderr=None):
if code != 0 and (throw or verbose): if code == 0:
msg = f'Command returned error {code}: {pretty_cmd(args, wd)}' return
if verbose: if (throw or verbose):
__log(ERR, msg) msg = f'Command returned error {code}: {pretty_cmd(args, wd)}: '
if stderr:
msg += stderr.strip()
if throw: if throw:
raise RuntimeError(msg) raise RuntimeError(msg)
@ -188,7 +190,8 @@ async def run_cmd(
exit_code = await proc.wait() exit_code = await proc.wait()
await asyncio.gather(*tasks) 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 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 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 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 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 return stdout_s, stderr_s
finally: finally: