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.o...@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 -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core