diff --git a/tools/ade b/tools/ade index 7cda4e3f4520a8604107adea6122ae069b9b0d28..70ab3ee9c7db184f5ca33ae661f12f16e65f11a1 100755 --- a/tools/ade +++ b/tools/ade @@ -105,6 +105,19 @@ class NotSupportedError(Exception): def __init__(self): pass +class CommandFailedError(Exception): + def __init__(self, stdout, stderr, exit_status): + self.stdout = stdout + self.stderr = stderr + self.exit_status = exit_status + + def __str__(self): + return """Exit code: {} + Stdout: {} + Stderr: {}""".format(self.exit_status, + self.stdout, + self.stderr) + def is_valid_url(url): result = urlparse(url) @@ -221,7 +234,13 @@ class Device: def _exec(self, *args): with closing(self._connect()) as ssh: stdin, stdout, stderr = ssh.exec_command(' '.join(args)) - return stdout.read().decode().strip() + out = stdout.read().decode().strip() + err = stderr.read().decode().strip() + status = stdout.channel.recv_exit_status () + if status != 0: + raise CommandFailedError(out, err, status) + + return out def load_sysroot_version(self): try: