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: