[Tutor] tempfile (fwd)
Marilyn Davis
marilyn at deliberate.com
Fri Dec 24 00:11:53 CET 2004
Ooops. I forgot to send to the list.
---------- Forwarded message ----------
Date: Thu, 23 Dec 2004 14:53:18 -0800 (PST)
From: Marilyn Davis <marilyn at deliberate.com>
To: QoD SEC <qodsec2 at gmail.com>
Subject: Re: [Tutor] tempfile
On Thu, 23 Dec 2004, QoD SEC wrote:
> you could use the seek method of the file object to go to the
> beginning of the file:
Thank you. But my problem was that I had a "file descriptor", a
low-level thing, and not a "file object", a high-level thing.
A file descriptor doesn't have a seek.
But I found the os.fdopen(fd) call. It makes a file object from a
file descriptor. So I can do:
#!/usr/bin/env python
import tempfile
import os
def do_test():
tmp_fp, tmp_name = tempfile.mkstemp()
os.write(tmp_fp, "stuff")
file_obj = os.fdopen(tmp_fp)
file_obj.seek(0)
print os.read(tmp_fp,10)
os.close(tmp_fp)
do_test()
---
and "stuff" comes out.
But, the mystery now is:
def do_test():
tmp_fp, tmp_name = tempfile.mkstemp()
os.write(tmp_fp, "stuff")
os.fdopen(tmp_fp).seek(0)
print os.read(tmp_fp,10)
os.close(tmp_fp)
---
gets an OSError: [Errno 9] Bad File Descriptor
on os.read(tmp_fp,10)
I'm thinking that, if I don't keep a reference to the file object,
it gets automatically closed.
How pythonic.
Thank you for your thoughts.
Marilyn
> here is what the library reference says about it:
>
> seek( offset[, whence])
> Set the file's current position, like stdio's fseek(). The whence
> argument is optional and defaults to 0 (absolute file positioning);
> other values are 1 (seek relative to the current position) and 2 (seek
> relative to the file's end). There is no return value. Note that if
> the file is opened for appending (mode 'a' or 'a+'), any seek()
> operations will be undone at the next write. If the file is only
> opened for writing in append mode (mode 'a'), this method is
> essentially a no-op, but it remains useful for files opened in append
> mode with reading enabled (mode 'a+'). If the file is opened in text
> mode (mode 't'), only offsets returned by tell() are legal. Use of
> other offsets causes undefined behavior.
>
> Note that not all file objects are seekable.
>
> from http://docs.python.org/lib/bltin-file-objects.html
>
>
> On Thu, 23 Dec 2004 14:17:12 -0800 (PST), Marilyn Davis
> <marilyn at deliberate.com> wrote:
> > Hello Python Tutors,
> >
> > I'm using tempfile. The doc says it is opened 'w+b' so that it can be
> > read and written without closing and reopening.
> >
> > But, for the life of me, I can't find any way to rewind it so I can
> > read what I wrote.
> >
> > tempfile.mkstemp gives me the file descriptor. Is there a way to make
> > a file object from a file descriptor?
> >
> > Or, is there something in os or fcntl that allows me to rewind from a
> > file descriptor?
> >
> > Thank you for any help you can give.
> >
> > Marilyn Davis
> >
> > _______________________________________________
> > Tutor maillist - Tutor at python.org
> > http://mail.python.org/mailman/listinfo/tutor
> >
>
--
More information about the Tutor
mailing list