[issue38710] unsynchronized write pointer in io.TextIOWrapper in 'r+' mode

2019-11-17 Thread Martin Panter


Martin Panter  added the comment:

Previously Issue 12215 and a couple of other duplicates were opened about this. 
Writing after reading with TextIOWrapper doesn't work as people expect. The 
report was closed apparently because Victor thought there wasn't enough 
interest in it.

FWIW the seek-then-write workaround will probably work for most common codecs, 
but would suffer the same problems discussed in Issue 26158 for codecs like 
UTF-7 and ISO-2022 that would need the encoder state constructed from the 
decoder state.

--
nosy: +martin.panter
superseder:  -> TextIOWrapper: issues with interlaced read-write

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38710] unsynchronized write pointer in io.TextIOWrapper in 'r+' mode

2019-11-06 Thread Josh Rosenberg


Change by Josh Rosenberg :


--
nosy: +josh.r

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38710] unsynchronized write pointer in io.TextIOWrapper in 'r+' mode

2019-11-06 Thread Josh Rosenberg


Change by Josh Rosenberg :


--
components: +Library (Lib)

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue38710] unsynchronized write pointer in io.TextIOWrapper in 'r+' mode

2019-11-05 Thread Manuel Ignacio Pérez Alcolea

New submission from Manuel Ignacio Pérez Alcolea :

There seems to be a bug in the `io.TextIOWrapper` class while working in 'r+' 
mode, although I can't say the source of the problem is right there.

The write pointer doesn't match `file.tell()` after performing a read operation.

For example, this file, consisting of 3 lines:

  line one
  line two
  line three

Doesn't result in the expected modification running the following program:

with open('file', 'r+', buffering=1) as f:
print(f.tell())  # => 0
print(f.readline().strip())  # we read 1 line
print(f.tell())  # => 9  
print('Hello', file=f)   # we write "Hello\n"
print(f.tell())  # => 34

Instad of

  line one
  Hello
  wo
  line three

It results in

  line one
  line two
  line threeHello

But it works just fine if `f.seek(f.tell())` is added the program, right before 
the write operation.

There are several possible explanations on StackOverflow, involving the 
buffering for IO in text files:

https://stackoverflow.com/a/58722058/11601118

--
components: IO
messages: 356089
nosy: Manuel Ignacio Pérez Alcolea
priority: normal
severity: normal
status: open
title: unsynchronized write pointer in io.TextIOWrapper in 'r+' mode
type: behavior
versions: Python 3.7

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com