| #!/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() |