[ python-Bugs-1569057 ] Using .next() on file open in write mode writes junk to file

SourceForge.net noreply at sourceforge.net
Sat Oct 7 18:04:50 CEST 2006


Bugs item #1569057, was opened at 2006-10-01 23:49
Message generated for change (Comment added) made by rainy
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1569057&group_id=5470

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Documentation
Group: Python 2.5
Status: Open
Resolution: None
Priority: 5
Submitted By: andrei kulakov (rainy)
Assigned to: Nobody/Anonymous (nobody)
Summary: Using .next() on file open in write mode writes junk to file

Initial Comment:
When you open a file in write mode and use .next(), it 
prints an error and writes many lines of junk to file. 
I tested on windows and python 2.5:

>>> f = open('test', 'w') 
>>> f.fileno() 
4 
>>> f.write('1\n') 
>>> f.write('2\n3\n4\n') 
>>> f.next() 


Traceback (most recent call last): 
  File "<pyshell#8>", line 1, in <module> 
    f.next() 
IOError: [Errno 9] Bad file descriptor 

>>> f.close() 
>>> f = open('test') 
>>> f.next() 
'1\n' 
>>> f.next() 
'2\n' 
>>> f.next() 
'3\n' 
>>> f.next() 
'4\n' 
>>> f.next() 


'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x
00\x00\x00\x00\x00\x­
00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\­
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00 
...many more lines of junk...'



----------------------------------------------------------------------

>Comment By: andrei kulakov (rainy)
Date: 2006-10-07 11:04

Message:
Logged In: YES 
user_id=511010

I tried it on win2k sp4 running python 2.5 and right now 
tried it on winXP running python 2.4 - same error. Also, at 
least one user on python newsgroup tried it and got a 
slightly different result: he did not get the error on
 .next() but the junk was written to the file. I paste my 
latest attempt right out of IDLE, without any modification 
(my first paste was also straight from idle). Except that I 
trim the junk characters, because there's more than a 
screen of 'em.

IDLE 1.1.2      
>>> f = open('test', 'w')
>>> f.write('1\n')
>>> f.next()

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in -toplevel-
    f.next()
IOError: [Errno 9] Bad file descriptor
>>> f.close()
>>> f = open('test')
>>> f.next()
'1\n'
>>> f.next()
"\x95\x00\xc8\xe ......."


Please let me know if you need to know anything else...

----------------------------------------------------------------------

Comment By: Skip Montanaro (montanaro)
Date: 2006-10-07 05:38

Message:
Logged In: YES 
user_id=44345

Works for me.  (Nearly current build from SVN.) I find it implausible that your 
explanation of failing to flush the file is the cause of the problem since closing 
the file will cause it to be flushed.  You didn't open the file for "w+" so there's no 
opportunity to switch between writing and reading.

What platform are you using?


----------------------------------------------------------------------

Comment By: andrei kulakov (rainy)
Date: 2006-10-03 20:23

Message:
Logged In: YES 
user_id=511010

Python newsgroup folks said that this is normal because when 
switching between write/read modes without doing flush() 
first, result is undefined. There was a suggestion from 
Terry Ready to add this to documentation on file methods:

"When switching from reading or writing (or vice versa), 
call flush(), or 
the result will be undefined."

thx, -andrei

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1569057&group_id=5470


More information about the Python-bugs-list mailing list