scripts/cronjobs/errtee.py (16 lines of code) (raw):

""" Class to copy stderr to stdout. This is intended for use in cronjobs, where it is useful to have both stderr and stdout in the log file but still have stderr so that the mailer gets any errors The main script should be run unbuffered (-u) Unfortunately Python does not seem to offer the equivalent of: perl -[mM][-]module execute "use/no module..." before executing program ruby -rlibrary require the library before executing your script lua -l name require library 'name' Thus the module has to be explicitly imported by the user script, and the user must defing the 'ERRTEE' environment variable to enable it """ import sys import os class ErrTee(object): def write(self, buf): sys.__stderr__.write(buf) sys.stdout.write(buf) def flush(self): sys.__stderr__.flush() # only enable the override if it is needed if 'ERRTEE' in os.environ: sys.stderr=ErrTee() if __name__ == '__main__': # simple test print("STDOUT1") sys.stderr.write("STDERR2\n") sys.stderr=ErrTee() # enable for testing sys.stderr.write("STDERR3 (should also appear on STDOUT)\n") raise Exception("STDERR4 (should also appear on STDOUT)")