oeqa: add output to subprocess exceptions

Out of the box subprocess.CalledProcessError.__str__() just displays the command
and exit code, which isn't very useful for debugging.

Add a function to oeqa.utils.subprocesstweak to monkey-patch __str__() so that
it can also display the value of stdout and stderr.

(From OE-Core rev: c55401ba1646202fa36e4973b05dbacaa146cb16)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ross Burton 2017-03-01 12:07:44 +00:00 committed by Richard Purdie
parent 30ad362417
commit 726832895d
2 changed files with 19 additions and 9 deletions

View File

@ -135,15 +135,6 @@ class oeRuntimeTest(oeTest):
if status != 0:
return status
class OETestCalledProcessError(subprocess.CalledProcessError):
def __str__(self):
if hasattr(self, "stderr"):
return "Command '%s' returned non-zero exit status %d with output %s and stderr %s" % (self.cmd, self.returncode, self.output, self.stderr)
else:
return "Command '%s' returned non-zero exit status %d with output %s" % (self.cmd, self.returncode, self.output)
subprocess.CalledProcessError = OETestCalledProcessError
def getmodule(pos=2):
# stack returns a list of tuples containg frame information
# First element of the list the is current frame, caller is 1

View File

@ -0,0 +1,19 @@
import subprocess
class OETestCalledProcessError(subprocess.CalledProcessError):
def __str__(self):
def strify(o):
if isinstance(o, bytes):
return o.decode("utf-8", errors="replace")
else:
return o
s = "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
if hasattr(self, "output") and self.output:
s = s + "\nStandard Output: " + strify(self.output)
if hasattr(self, "stderr") and self.stderr:
s = s + "\nStandard Error: " + strify(self.stderr)
return s
def errors_have_output():
subprocess.CalledProcessError = OETestCalledProcessError