New submission from Fabio Zadrozny <[email protected]>:
When running Python in unbuffered mode it may fail to write all the contents to
the actual console (on Windows).
The code below can reproduce the issue:
```
import sys
s = ''
for i in range(1,301):
s += f"{str(i*100).zfill(10)}{'x' * 89}\n"
sys.stdout.write(s)
```
When calling it with `python -u code.py` it'll write only up to line 15000 and
when calling it with `python code.py` it'll write up to line 30000.
This fails because in `_textiowrapper_writeflush` it doesn't verify if all the
contents have been indeed written and thus fails in a partial write. In
buffered mode it works because `_io_BufferedWriter_write_impl` does the job
properly.
I'm a bit uncertain on why doesn't `_io__WindowsConsoleIO_write_impl` itself do
the loop to write everything instead of leaving it up to callers to do that
work (apparently due to issue11395 it says that it only writes partially, but
maybe the fix could've been to loop inside of
`_io__WindowsConsoleIO_write_impl` to write everything instead of expecting
callers to handle partial writes...
----------
components: IO
messages: 378684
nosy: fabioz
priority: normal
severity: normal
status: open
title: Running Python in unbuffered mode may not write all contents to the
console
type: behavior
versions: Python 3.8
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue42044>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com