diff options
author | Daniel Drake <dsd@laptop.org> | 2009-12-22 10:27:19 (GMT) |
---|---|---|
committer | Daniel Drake <dsd@laptop.org> | 2009-12-22 10:29:10 (GMT) |
commit | 183d19af5f2716dd9c2393e2ece46bcc68af256e (patch) | |
tree | 9456d2c5e59353e15d021644735ac1b980ebdcf3 /osbuilder.py | |
parent | ff0ecaa400cee645db07efb42158edf8b522fed0 (diff) |
Terminate part process on interrupt
Diffstat (limited to 'osbuilder.py')
-rwxr-xr-x | osbuilder.py | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/osbuilder.py b/osbuilder.py index 05a1984..b48859a 100755 --- a/osbuilder.py +++ b/osbuilder.py @@ -89,7 +89,12 @@ class Stage(object): shenv = self._make_environment() proc = subprocess.Popen(["/bin/bash", path], shell=False, stdout=outtype, env=shenv) - (out, err) = proc.communicate() + try: + (out, err) = proc.communicate() + except (Exception, KeyboardInterrupt), e: + proc.terminate() + raise StageException(mod, part, repr(e)) + if not self.ignore_failures and proc.returncode != 0: raise StageException(mod, part, proc.returncode) if not self.console_output: @@ -98,7 +103,12 @@ class Stage(object): shenv = self._make_environment() proc = subprocess.Popen(["/usr/bin/python", path], shell=False, stdout=outtype, env=shenv) - (out, err) = proc.communicate() + try: + (out, err) = proc.communicate() + except (Exception, KeyboardInterrupt), e: + proc.terminate() + raise StageException(mod, part, repr(e)) + if not self.ignore_failures and proc.returncode != 0: raise StageException(mod, part, proc.returncode) if not self.console_output: @@ -344,7 +354,7 @@ class OsBuilder(object): CleanupStage(self).run() except: pass - raise OsBuilderException("Failure in %s: module %s, part %s, error code %d" % (stage.__name__, ex.module, ex.part, ex.code)) + raise OsBuilderException("Failure in %s: module %s, part %s, error code %s" % (stage.__name__, ex.module, ex.part, ex.code)) # cleanup CleanupStage(self).run() |