diff options
Diffstat (limited to 'bin/mixer-wrapper.py')
-rwxr-xr-x | bin/mixer-wrapper.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/bin/mixer-wrapper.py b/bin/mixer-wrapper.py new file mode 100755 index 0000000..1424f36 --- /dev/null +++ b/bin/mixer-wrapper.py @@ -0,0 +1,40 @@ +#!/usr/bin/python2 + +import os +import select +import sys +import subprocess +import termios +import pty +from itertools import chain + +def main(cmd=None): + (pipe_in, pipe_out) = pty.openpty() + pipe = os.fdopen(pipe_in) + + mixer = subprocess.Popen(sys.argv[1], stdin=subprocess.PIPE, + stdout=pipe_out, stderr=subprocess.STDOUT, + shell=True, bufsize=0, close_fds=True) + + input = iter(sys.stdin.readline, '') + if cmd is not None: + input = chain([cmd], input) + + for line in input: + mixer.stdin.write(b"%s\n" % line) + mixer.stdin.flush() + + termios.tcflush(pipe_in, termios.TCIFLUSH) + fds = select.select([pipe_in], [], [], 0.2)[0] + if len(fds) <= 0: + mixer.stdin.close() + mixer.wait() + if cmd is None or line != cmd: + return line + return None + + +if __name__ == '__main__': + cmd = None + while True: + cmd = main(cmd) |