from contextlib import contextmanager import os import tempfile def cleanFile(filename): try: os.remove(filename) except OSError: pass @contextmanager def guardedTempFilename(suffix='', prefix='', dir=None): # Creates and yeilds a temporary filename within a with statement. The file # is removed upon scope exit. handle, name = tempfile.mkstemp(suffix=suffix, prefix=prefix, dir=dir) os.close(handle) yield name cleanFile(name) @contextmanager def guardedFilename(name): # yeilds a filename within a with statement. The file is removed upon scope # exit. yield name cleanFile(name) @contextmanager def nullContext(value): # yeilds a variable within a with statement. No action is taken upon scope # exit. yield value def makeReport(cmd, out, err, rc): report = "Command: %s\n" % cmd report += "Exit Code: %d\n" % rc if out: report += "Standard Output:\n--\n%s--\n" % out if err: report += "Standard Error:\n--\n%s--\n" % err report += '\n' return report