summaryrefslogtreecommitdiffstats
path: root/bin/mixer-wrapper.py
diff options
context:
space:
mode:
Diffstat (limited to 'bin/mixer-wrapper.py')
-rwxr-xr-xbin/mixer-wrapper.py40
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)