1from contextlib import contextmanager
2import os
3import tempfile
4
5
6def cleanFile(filename):
7    try:
8        os.remove(filename)
9    except OSError:
10        pass
11
12
13@contextmanager
14def guardedTempFilename(suffix='', prefix='', dir=None):
15    # Creates and yeilds a temporary filename within a with statement. The file
16    # is removed upon scope exit.
17    handle, name = tempfile.mkstemp(suffix=suffix, prefix=prefix, dir=dir)
18    os.close(handle)
19    yield name
20    cleanFile(name)
21
22
23@contextmanager
24def guardedFilename(name):
25    # yeilds a filename within a with statement. The file is removed upon scope
26    # exit.
27    yield name
28    cleanFile(name)
29
30
31@contextmanager
32def nullContext(value):
33    # yeilds a variable within a with statement. No action is taken upon scope
34    # exit.
35    yield value
36
37
38def makeReport(cmd, out, err, rc):
39    report = "Command: %s\n" % cmd
40    report += "Exit Code: %d\n" % rc
41    if out:
42        report += "Standard Output:\n--\n%s--\n" % out
43    if err:
44        report += "Standard Error:\n--\n%s--\n" % err
45    report += '\n'
46    return report
47