diff options
Diffstat (limited to 'scripts/shush')
-rwxr-xr-x | scripts/shush | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/scripts/shush b/scripts/shush new file mode 100755 index 000000000000..a2dd6c8c58d0 --- /dev/null +++ b/scripts/shush @@ -0,0 +1,64 @@ +#!/usr/bin/env python + +import sys +import subprocess +import tempfile +import time +import os + +class Printer(object): + def __init__(self): + pass + + @classmethod + def write(self, message): + sys.stdout.write("%s\n" % message) + sys.stdout.flush() + +def command(): + return ' '.join(sys.argv[1:]) + +def tmpfile(suffix=None): + if suffix is None: suffix = "" + return tempfile.NamedTemporaryFile(prefix='shush', suffix=suffix, delete=False) + +def launch(cmd="/bin/ls", sin=None, sout=None): + class Process(object): + def __init__(self, p, i, o): + self.p = p + self.stdin = i + self.stdout = o + + def poll(self): + self.returncode = self.p.poll() + return self.returncode + + return Process(subprocess.Popen(cmd, shell=True, stdin=sin, stdout=sout, stderr=subprocess.STDOUT), sin, sout) + +def wait(p): + while p.poll() is None: + time.sleep(5) + Printer.write("still running @ %s..." % time.strftime("%Y%m%d%H%M%S")) # fool Xcode into thinking that I am doing something... + return p + +def exit(p): + code = p.returncode + if code != 0: + Printer.write("error: sucks to be you") + Printer.write("error: shushed process failed - go check %s for details" % (p.stdout.name)) + else: + Printer.write("shush: success - output is going away") + try: + os.remove(p.stdout.name) + finally: + pass + sys.exit(code) + +def main(): + out = tmpfile() + cmd = command() + Printer.write("shush: launching '%s' - std{out|err}=%s" % (cmd, out.name)) + p = wait(launch(cmd=cmd, sout=out)) + exit(p) + +main() |