diff options
Diffstat (limited to 'waflib/extras/print_commands.py')
-rw-r--r-- | waflib/extras/print_commands.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/waflib/extras/print_commands.py b/waflib/extras/print_commands.py new file mode 100644 index 00000000..3005c3ee --- /dev/null +++ b/waflib/extras/print_commands.py @@ -0,0 +1,46 @@ +#! /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 + + |