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