Skip to content

Instantly share code, notes, and snippets.

@kokumura
Last active June 1, 2016 04:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kokumura/4cec7193d354c5840bb049e131c12e10 to your computer and use it in GitHub Desktop.
Save kokumura/4cec7193d354c5840bb049e131c12e10 to your computer and use it in GitHub Desktop.
tty-exec.py
#!/usr/bin/env python
import subprocess, pty, os, sys
def _safe_read(m):
try:
return os.fdopen(m,"r").read()
except IOError:
return ''
sout_m, sout_s = pty.openpty()
serr_m, serr_s = pty.openpty()
p = subprocess.Popen(sys.argv[1:], stdin=sys.stdin, stdout=sout_s, stderr=serr_s)
p.communicate()
os.close(sout_s)
os.close(serr_s)
sys.stdout.write(_safe_read(sout_m))
sys.stderr.write(_safe_read(serr_m))
@kokumura
Copy link
Author

kokumura commented Jun 1, 2016

$ ls
foo bar baz

$ ls | cat
foo
bar
baz

$ tty-exec.py ls | cat
foo bar baz

(thanks to http://stackoverflow.com/a/34335713)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment