summaryrefslogtreecommitdiff
path: root/waflib/extras/print_commands.py
diff options
context:
space:
mode:
Diffstat (limited to 'waflib/extras/print_commands.py')
-rw-r--r--waflib/extras/print_commands.py46
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
+
+