import os, pty, subprocess, sys, termios, tty
out, cwd, *argv = sys.argv[1:]
master, slave = pty.openpty()
attrs = termios.tcgetattr(slave)
attrs[1] &= ~termios.OPOST termios.tcsetattr(slave, termios.TCSANOW, attrs)
env = dict(os.environ, LC_ALL="C")
p = subprocess.Popen(argv, cwd=cwd, stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=slave, env=env)
os.close(slave)
data = b""
while True:
try:
b = os.read(master, 65536)
except OSError:
break
if not b:
break
data += b
p.wait()
open(out, "wb").write(data)