--- pty.py.orig 2008-01-30 16:49:04.325764000 -0500 +++ pty.py 2008-02-17 15:08:47.352141000 -0500 @@ -136,15 +146,21 @@ Copies pty master -> standard output (master_read) standard input -> pty master (stdin_read)""" + fds = [master_fd, STDIN_FILENO] while 1: - rfds, wfds, xfds = select( - [master_fd, STDIN_FILENO], [], []) + rfds, wfds, xfds = select(fds, [], []) if master_fd in rfds: data = master_read(master_fd) - os.write(STDOUT_FILENO, data) + if not data: # Reached EOF. + fds.remove(master_fd) + else: + os.write(STDOUT_FILENO, data) if STDIN_FILENO in rfds: data = stdin_read(STDIN_FILENO) - _writen(master_fd, data) + if not data: # Reached EOF. + fds.remove(STDIN_FILENO) + else: + _writen(master_fd, data) def spawn(argv, master_read=_read, stdin_read=_read): """Create a spawned process."""