diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-12-05 14:52:54 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-12-05 16:19:49 +0100 |
commit | e77bfd58a8f1103574fe8a5496334d97196e9b5a (patch) | |
tree | e363499115e8736a40a8e1e2c0696cad7229b882 /build_scripts | |
parent | 014cbfa6916f99e75667f636cb6834063de0551b (diff) |
build system: Refactor helper backtick()
Use a context manager to dispose of the process properly
and remove Python2 code path.
Pick-to: 6.4 6.2
Change-Id: Ibad035078433a75a944dc10f49f404e9e63614af
Reviewed-by: Shyamnath Premnadh <Shyamnath.Premnadh@qt.io>
Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'build_scripts')
-rw-r--r-- | build_scripts/utils.py | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/build_scripts/utils.py b/build_scripts/utils.py index 23723dc96..b79c2294f 100644 --- a/build_scripts/utils.py +++ b/build_scripts/utils.py @@ -486,8 +486,8 @@ def get_environment_from_batch_command(env_cmd, initial=None): def back_tick(cmd, ret_err=False): """ - Run command `cmd`, return stdout, or stdout, stderr, - return_code if `ret_err` is True. + Run command `cmd`, return stdout, or (stdout, stderr, + return_code) if `ret_err` is True. Parameters ---------- @@ -511,22 +511,20 @@ def back_tick(cmd, ret_err=False): Raises RuntimeError if command returns non-zero exit code when ret_err isn't set. """ - proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) - out, err = proc.communicate() - if not isinstance(out, str): - # python 3 - out = out.decode() - err = err.decode() - retcode = proc.returncode - if retcode is None and not ret_err: - proc.terminate() - raise RuntimeError(f"{cmd} process did not terminate") - if retcode != 0 and not ret_err: - raise RuntimeError(f"{cmd} process returned code {retcode}\n*** {err}") - out = out.strip() + with subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, shell=True) as proc: + out_bytes, err_bytes = proc.communicate() + out = out_bytes.decode().strip() + err = err_bytes.decode().strip() + retcode = proc.returncode + if retcode is None and not ret_err: + proc.terminate() + raise RuntimeError(f"{cmd} process did not terminate") + if retcode != 0 and not ret_err: + raise RuntimeError(f"{cmd} process returned code {retcode}\n*** {err}") if not ret_err: return out - return out, err.strip(), retcode + return out, err, retcode MACOS_OUTNAME_RE = re.compile(r'\(compatibility version [\d.]+, current version [\d.]+\)') |