scons: Add readCommandWithReturn helper

In this way it will be possible to reliably catch any error
in the command execution which is not raising an exception
to Popen.

Change-Id: I4dc15648423f9bb8e8a470d97291dbd065c48eba
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28847
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Giacomo Travaglini
2020-05-11 10:01:46 +01:00
parent 384705a386
commit 2d6cd436f7

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2016 ARM Limited
# Copyright (c) 2016, 2020 ARM Limited
# All rights reserved.
#
# The license below extends only to copyright in the software and shall
@@ -177,9 +177,16 @@ def printList(items, indent=4):
line += item
print(line)
def readCommand(cmd, **kwargs):
"""run the command cmd, read the results and return them
this is sorta like `cmd` in shell"""
def readCommandWithReturn(cmd, **kwargs):
"""
run the command cmd, read the results and return them
this is sorta like `cmd` in shell
:param cmd: command to run with Popen
:type cmd: string, list
:returns: pair consisting on Popen retcode and the command stdout
:rtype: (int, string)
"""
from subprocess import Popen, PIPE, STDOUT
if isinstance(cmd, str):
@@ -196,10 +203,23 @@ def readCommand(cmd, **kwargs):
subp = Popen(cmd, **kwargs)
except Exception as e:
if no_exception:
return exception
return -1, exception
raise
return subp.communicate()[0].decode('utf-8')
output = subp.communicate()[0].decode('utf-8')
return subp.returncode, output
def readCommand(cmd, **kwargs):
"""
run the command cmd, read the results and return them
this is sorta like `cmd` in shell
:param cmd: command to run with Popen
:type cmd: string, list
:returns: command stdout
:rtype: string
"""
return readCommandWithReturn(cmd, **kwargs)[1]
def makeDir(path):
"""Make a directory if it doesn't exist. If the path does exist,