oe.utils: add oe_run convenience function
authorChris Larson <chris_larson@mentor.com>
Tue, 24 Aug 2010 21:06:01 +0000 (14:06 -0700)
committerChris Larson <chris_larson@mentor.com>
Wed, 25 Aug 2010 14:31:52 +0000 (07:31 -0700)
This one is intended to be used from python snippets in variables.  It returns
the stdout of the subprocess and raises an exception if the exit code isn't 0.

Signed-off-by: Chris Larson <chris_larson@mentor.com>
classes/utils.bbclass

index 4840c4f..0a7a045 100644 (file)
@@ -63,6 +63,24 @@ def subprocess_setup():
    # non-Python subprocesses expect.
    signal.signal(signal.SIGPIPE, signal.SIG_DFL)
 
+def oe_run(d, cmd, **kwargs):
+   """Convenience function to run a command and return its output, raising an
+   exception when the command fails"""
+   from subprocess import PIPE
+
+   options = {
+      "stdout": PIPE,
+      "stderr": PIPE,
+      "shell": True,
+   }
+   options.update(kwargs)
+   pipe = oe_popen(d, cmd, **options)
+   stdout, stderr = pipe.communicate()
+   if pipe.returncode != 0:
+      raise RuntimeError("Execution of '%s' failed with '%s':\n%s" %
+                         (cmd, pipe.returncode, stderr))
+   return stdout
+
 def oe_popen(d, cmd, **kwargs):
     """ Convenience function to call out processes with our exported
     variables in the environment.