Python - How do I convert "an OS-level handle to an open file" to a file object?
a tuple containing an OS-level handle to an open file (as would be returned by os.open()) and the absolute pathname of that file, in that order.
How do I convert that OS-level handle to a file object?
The documentation for os.open() states:
To wrap a file descriptor in a "file object", use fdopen().
So I tried:
>>> import tempfile >>> tup = tempfile.mkstemp() >>> import os >>> f = os.fdopen(tup) >>> f.write('foo\n') Traceback (most recent call last): File "<stdin>", line 1, in ? IOError: [Errno 9] Bad file descriptor
Asked by: Roland259 | Posted: 01-10-2021
You can use
to write to the handle.
If you want to open the handle for writing you need to add the "w" mode
Answered by: Melissa945 | Posted: 02-11-2021
f = os.fdopen(tup, "w") f.write("foo")
Here's how to do it using a with statement:
Answered by: Roman542 | Posted: 02-11-2021
from __future__ import with_statement from contextlib import closing fd, filepath = tempfile.mkstemp() with closing(os.fdopen(fd, 'w')) as tf: tf.write('foo\n')
You forgot to specify the open mode ('w') in fdopen(). The default is 'r', causing the write() call to fail.
I think mkstemp() creates the file for reading only. Calling fdopen with 'w' probably reopens it for writing (you can reopen the file created by mkstemp).Answered by: Elise808 | Posted: 02-11-2021
Answered by: Julia864 | Posted: 02-11-2021
temp = tempfile.NamedTemporaryFile(delete=False) temp.file.write('foo\n') temp.close()
What's your goal, here? Is
tempfile.TemporaryFile inappropriate for your purposes?
I can't comment on the answers, so I will post my comment here:
To create a temporary file for write access you can use tempfile.mkstemp and specify "w" as the last parameter, like:
Answered by: Elian601 | Posted: 02-11-2021
f = tempfile.mkstemp("", "", "", "w") # first three params are 'suffix, 'prefix', 'dir'... os.write(f, "write something")