Python - 如何将“操作系统级别的打开文件句柄”转换为文件对象?
tempfile.mkstemp() 返回的是:
一个元组,里面包含了一个操作系统级别的文件句柄(就像用 os.open() 打开文件时返回的那样)和那个文件的绝对路径名,顺序是这样的。
我该怎么把这个操作系统级别的文件句柄转换成一个文件对象呢?
os.open() 的文档上说:
要把文件描述符包装成一个“文件对象”,可以使用 fdopen()。
所以我试了:
>>> import tempfile
>>> tup = tempfile.mkstemp()
>>> import os
>>> f = os.fdopen(tup[0])
>>> f.write('foo\n')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
IOError: [Errno 9] Bad file descriptor
6 个回答
6
你忘了在fdopen()里指定打开模式('w')。默认是'r',这就导致write()调用失败了。
我觉得mkstemp()创建的文件只能读取。用'w'来调用fdopen可能会重新打开这个文件以便写入(你可以重新打开mkstemp创建的文件)。
13
下面是如何使用with语句来实现这个功能:
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')
60
你可以使用
os.write(tup[0], "foo\n")
来写入这个句柄。
如果你想要打开这个句柄进行写入,你需要加上"w"模式。
f = os.fdopen(tup[0], "w")
f.write("foo")