On Oct 22, 3:44 pm, [EMAIL PROTECTED] wrote: > On Oct 22, 2:54 pm, Mike Kent <[EMAIL PROTECTED]> wrote: > > > > > Before I file a bug report against Python 2.5.2, I want to run this by > > the newsgroup to make sure I'm not being stupid. > > > I have a text file of fixed-length records I want to read in random > > order. That file is being changed in real-time by another process, > > and my process want to see the changes to the file. What I'm seeing > > is that, once I've opened the file and read a record, all subsequent > > seeks to and reads of that same record will return the same data as > > the first read of the record, so long as I don't close and reopen the > > file. This indicates some sort of buffering and caching is going on. > > > Consider the following: > > > $ echo "hi" >foo.txt # Create my test file > > $ python2.5 # Run Python > > Python 2.5.2 (r252:60911, Sep 22 2008, 16:13:07) > > [GCC 3.4.6 20060404 (Red Hat 3.4.6-9)] on linux2 > > Type "help", "copyright", "credits" or "license" for more information. > > > >>> f = open('foo.txt') # Open my test file > > >>> f.seek(0) # Seek to the beginning of the file > > >>> f.readline() # Read the line, I get the data I expected > > 'hi\n' > > >>> # At this point, in another shell I execute 'echo "bye" >foo.txt'. > > >>> 'foo.txt' now has been changed > > >>> # on the disk, and now contains 'bye\n'. > > >>> f.seek(0) # Seek to the beginning of the still-open file > > >>> f.readline() # Read the line, I don't get 'bye\n', I get > > >>> the original data, which is no longer there. > > 'hi\n' > > >>> f.close() # Now I close the file... > > >>> f = open('foo.txt') # ... and reopen it > > >>> f.seek(0) # Seek to the beginning of the file > > >>> f.readline() # Read the line, I get the expected 'bye\n' > > 'bye\n' > > > It seems pretty clear to me that this is wrong. If there is any > > caching going on, it should clearly be discarded if I do a seek. Note > > that it's not just readline() that's returning me the wrong, cached > > data, as I've also tried this with read(), and I get the same > > results. It's not acceptable that I have to close and reopen the file > > before every read when I'm doing random record access. > > > So, is this a bug, or am I being stupid? > > This has to do how the OS file-system operates. This is equivalent of > doing: > > echo "hi" >foo.txt > vi foo.txt > in another session type: echo "bye" > foo.txt > > the text in the vi session doesn't change. > > you can even type 'rm foo.txt' and vi will still have the text there.
Actually disregard what I said. vi loads everything in memory. You might want to try: f = open('foo.txt','r',0) and see if that fixes your problem. -- http://mail.python.org/mailman/listinfo/python-list