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 <[email protected]>
<http://bugs.python.org/issue21090>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com