import os, sys, subprocess, pty, select, re BUFSIZ = 1024 MAGIC = '\004\004' # ctrl-D x2 escape = re.compile(r'(\x9B|\x1B\[)[0-?]*[ -\/]*[@-~]') data = '\n'.join([ '1 + 1', '2000', '(function() {})', '"yee"', ]) + '\n' + MAGIC master, slave = pty.openpty() p = subprocess.Popen('node', stdin=slave, stdout=slave, stderr=subprocess.STDOUT) while p.poll() is None: r, w, _ = select.select([master], [master], [], 0) if r: sys.stdout.write(escape.sub('', os.read(master, BUFSIZ))) if w and data: data = data[os.write(master, data):]