[OE-core] [PATCH 1/2] combo-layer: runcmd() with separate output
Paul Eggleton
paul.eggleton at linux.intel.com
Thu Mar 12 18:33:09 UTC 2015
On Tuesday 10 March 2015 11:10:48 Patrick Ohly wrote:
> Allow the caller to specify a separate output stream. stderr is always
> a temporary file opened by runcmd(), so read from that to capture
> output for error reporting *and* the return value.
>
> The reasoning for the latter is a) that this preserves the traditional
> behavior when out=None and b) if the caller wants the content of
> stdout, it can read from the stream itself, which is not possible for
> the temporary stderr.
>
> Signed-off-by: Patrick Ohly <patrick.ohly at intel.com>
> ---
> scripts/combo-layer | 18 +++++++++++-------
> 1 file changed, 11 insertions(+), 7 deletions(-)
>
> diff --git a/scripts/combo-layer b/scripts/combo-layer
> index 5f10e83..fb3fb50 100755
> --- a/scripts/combo-layer
> +++ b/scripts/combo-layer
> @@ -149,23 +149,27 @@ class Configuration(object):
> logger.error("ERROR: patchutils package is missing, please
> install it (e.g. # apt-get install patchutils)") sys.exit(1)
>
> -def runcmd(cmd,destdir=None,printerr=True):
> +def runcmd(cmd,destdir=None,printerr=True,out=None):
> """
> execute command, raise CalledProcessError if fail
> return output if succeed
> """
> logger.debug("run cmd '%s' in %s" % (cmd, os.getcwd() if destdir is
> None else destdir)) - out = os.tmpfile()
> + if not out:
> + out = os.tmpfile()
> + err = out
> + else:
> + err = os.tmpfile()
> try:
> - subprocess.check_call(cmd, stdout=out, stderr=out, cwd=destdir,
> shell=True) + subprocess.check_call(cmd, stdout=out, stderr=err,
> cwd=destdir, shell=isinstance(cmd, str)) except
> subprocess.CalledProcessError,e:
> - out.seek(0)
> + err.seek(0)
> if printerr:
> - logger.error("%s" % out.read())
> + logger.error("%s" % err.read())
> raise e
>
> - out.seek(0)
> - output = out.read()
> + err.seek(0)
> + output = err.read()
> logger.debug("output: %s" % output )
> return output
I'm fine with this change, but FYI unfortunately we have a number of copies of
this function floating around. We'll probably end up having to do a refactoring
of these at some point soon.
Cheers,
Paul
--
Paul Eggleton
Intel Open Source Technology Centre
More information about the Openembedded-core
mailing list