#! /usr/bin/env python """ Illustrate how to override a class method to do something In this case, print the commands being executed as strings (the commands are usually lists, so this can be misleading) """ import sys from waflib import Context, Utils, Logs def exec_command(self, cmd, **kw): subprocess = Utils.subprocess kw['shell'] = isinstance(cmd, str) txt = cmd if isinstance(cmd, list): txt = ' '.join(cmd) print(txt) Logs.debug('runner_env: kw=%s' % kw) try: if self.logger: # warning: may deadlock with a lot of output (subprocess limitation) self.logger.info(cmd) kw['stdout'] = kw['stderr'] = subprocess.PIPE p = subprocess.Popen(cmd, **kw) (out, err) = p.communicate() if out: self.logger.debug('out: %s' % out.decode(sys.stdout.encoding or 'iso8859-1')) if err: self.logger.error('err: %s' % err.decode(sys.stdout.encoding or 'iso8859-1')) return p.returncode else: p = subprocess.Popen(cmd, **kw) return p.wait() except OSError: return -1 Context.Context.exec_command = exec_command