2015-01-17 02:59:54 +08:00
|
|
|
#!/usr/bin/env python
|
|
|
|
|
|
|
|
import sys
|
|
|
|
import subprocess
|
|
|
|
import tempfile
|
|
|
|
import time
|
2015-01-17 07:16:22 +08:00
|
|
|
import os
|
|
|
|
|
|
|
|
class Printer(object):
|
|
|
|
def __init__(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def write(self, message):
|
|
|
|
sys.stdout.write("%s\n" % message)
|
|
|
|
sys.stdout.flush()
|
2015-01-17 02:59:54 +08:00
|
|
|
|
|
|
|
def command():
|
|
|
|
return ' '.join(sys.argv[1:])
|
|
|
|
|
|
|
|
def tmpfile(suffix=None):
|
2015-01-17 07:16:22 +08:00
|
|
|
if suffix is None: suffix = ""
|
2015-01-17 02:59:54 +08:00
|
|
|
return tempfile.NamedTemporaryFile(prefix='shush', suffix=suffix, delete=False)
|
|
|
|
|
2015-01-17 07:16:22 +08:00
|
|
|
def launch(cmd="/bin/ls", sin=None, sout=None):
|
2015-01-17 02:59:54 +08:00
|
|
|
class Process(object):
|
2015-01-17 07:16:22 +08:00
|
|
|
def __init__(self, p, i, o):
|
2015-01-17 02:59:54 +08:00
|
|
|
self.p = p
|
|
|
|
self.stdin = i
|
|
|
|
self.stdout = o
|
|
|
|
|
|
|
|
def poll(self):
|
|
|
|
self.returncode = self.p.poll()
|
|
|
|
return self.returncode
|
|
|
|
|
2015-01-17 07:16:22 +08:00
|
|
|
return Process(subprocess.Popen(cmd, shell=True, stdin=sin, stdout=sout, stderr=subprocess.STDOUT), sin, sout)
|
2015-01-17 02:59:54 +08:00
|
|
|
|
|
|
|
def wait(p):
|
|
|
|
while p.poll() is None:
|
|
|
|
time.sleep(5)
|
2015-01-17 07:16:22 +08:00
|
|
|
Printer.write("still running @ %s..." % time.strftime("%Y%m%d%H%M%S")) # fool Xcode into thinking that I am doing something...
|
2015-01-17 02:59:54 +08:00
|
|
|
return p
|
|
|
|
|
|
|
|
def exit(p):
|
|
|
|
code = p.returncode
|
|
|
|
if code != 0:
|
2015-01-17 07:16:22 +08:00
|
|
|
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
|
2015-01-17 02:59:54 +08:00
|
|
|
sys.exit(code)
|
|
|
|
|
|
|
|
def main():
|
2015-01-17 07:16:22 +08:00
|
|
|
out = tmpfile()
|
|
|
|
cmd = command()
|
|
|
|
Printer.write("shush: launching '%s' - std{out|err}=%s" % (cmd, out.name))
|
|
|
|
p = wait(launch(cmd=cmd, sout=out))
|
2015-01-17 02:59:54 +08:00
|
|
|
exit(p)
|
|
|
|
|
|
|
|
main()
|