New submission from INADA Naoki:

In C implementation, write() calls underlaying flush() method when 
write_through=True.

https://github.com/python/cpython/blob/3.6/Modules/_io/textio.c

    if (self->write_through)
        text_needflush = 1;
    if (self->line_buffering &&
        (haslf ||
         PyUnicode_FindChar(text, '\r', 0, PyUnicode_GET_LENGTH(text), 1) != 
-1))
        needflush = 1;


But pure Python implementation doesn't care write_through option at all.

https://github.com/python/cpython/blob/3.6/Lib/_pyio.py

        self.buffer.write(b)
        if self._line_buffering and (haslf or "\r" in s):
            self.flush()

When PyPy 3.5 is released, this difference may affects PyPy users.
(I hadn't checked how PyPy provide io module.)

----------
components: IO
messages: 288282
nosy: inada.naoki
priority: normal
severity: normal
status: open
title: TextIOWrapper's write_through option behave differently between C and 
pure Python implementation.
type: behavior
versions: Python 3.5, Python 3.6, Python 3.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue29611>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to