From 752f425d832d1d4e00f39e80835dd249fb44e698 Mon Sep 17 00:00:00 2001 From: John Snow Date: Tue, 19 Oct 2021 10:49:11 -0400 Subject: iotests/297: Change run_linter() to raise an exception on failure Instead of using a process return code as the python function return value (or just not returning anything at all), allow run_linter() to raise an exception instead. The responsibility for printing output on error shifts from the function itself to the caller, who will know best how to present/format that information. (Also, "suppress_output" is now a lot more accurate of a parameter name.) Signed-off-by: John Snow Reviewed-by: Hanna Reitz Message-id: 20211019144918.3159078-9-jsnow@redhat.com Signed-off-by: John Snow --- tests/qemu-iotests/297 | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'tests/qemu-iotests') diff --git a/tests/qemu-iotests/297 b/tests/qemu-iotests/297 index d21673a292..76d6a23f53 100755 --- a/tests/qemu-iotests/297 +++ b/tests/qemu-iotests/297 @@ -70,22 +70,18 @@ def run_linter( """ Run a python-based linting tool. - If suppress_output is True, capture stdout/stderr of the child - process and only print that information back to stdout if the child - process's return code was non-zero. + :param suppress_output: If True, suppress all stdout/stderr output. + :raise CalledProcessError: If the linter process exits with failure. """ - p = subprocess.run( + subprocess.run( ('python3', '-m', tool, *args), env=env, - check=False, + check=True, stdout=subprocess.PIPE if suppress_output else None, stderr=subprocess.STDOUT if suppress_output else None, universal_newlines=True, ) - if suppress_output and p.returncode != 0: - print(p.stdout) - def main() -> None: for linter in ('pylint-3', 'mypy'): @@ -102,11 +98,19 @@ def main() -> None: print('=== pylint ===') sys.stdout.flush() - run_linter('pylint', files, env=env) + try: + run_linter('pylint', files, env=env) + except subprocess.CalledProcessError: + # pylint failure will be caught by diffing the IO. + pass print('=== mypy ===') sys.stdout.flush() - run_linter('mypy', files, env=env, suppress_output=True) + try: + run_linter('mypy', files, env=env, suppress_output=True) + except subprocess.CalledProcessError as exc: + if exc.output: + print(exc.output) iotests.script_main(main) -- cgit v1.2.3