STINNER Victor added the comment: On IRC, buck1 asked why the following code behaves differently on Python < 3.4 and Python >= 3.4. It is related to this issue in fact.
Code: --- from __future__ import print_function from os import openpty read, write = openpty() from subprocess import Popen proc = Popen( ('echo', 'ok'), stdout=write, close_fds=True, ) from os import fdopen fdopen(write, 'w').close() with fdopen(read) as stdout: print('STDOUT', stdout.read()) print('exit code:', proc.wait()) --- Simplified example: --- import io, os read, write = os.openpty() os.write(write, b'ok\n') os.close(write) with io.FileIO(read, closefd=False) as fp: print(fp.readall()) --- On Python < 3.4, it displays "ok", whereas Python 3.4 and later fail with OSError(5, 'Input/output error' on readall(). Another example: --- import os read, write = os.openpty() os.write(write, b'ok\n') os.close(write) print("read: %r" % os.read(read, 4096)) print("read: %r" % os.read(read, 4096)) --- The first read syscall succeed, even if the write end is already called. But the second read syscall fails with EIO. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue21090> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com