python:如果我使用fdopen,是否需要关闭mkstemp的文件?

12 投票
5 回答
4601 浏览
提问于 2025-04-17 04:30

以下哪种写法更正确呢?

fi, path = tempfile.mkstemp()
f = os.fdopen(fi, "w")
f.write(res)
f.close()
os.close(fi)

或者:

fi, path = tempfile.mkstemp()
f = os.fdopen(fi, "w")
f.write(res)
f.close()

5 个回答

2

接着之前的回答,如果你需要路径的话:

f_handle, f_path = tempfile.mkstemp()
with os.fdopen(f_handle, 'w') as f:
    f.write(res)

try:
    # Use path somehow
    some_function(f_path)

finally:
    # Clean up
    os.unlink(f_path)
3

如果你使用的是比较新的Python版本,你可以把这个代码简化成:

with os.fdopen(tempfile.mkstemp()[0]) as f:
    f.write(res)
7

检查一下 f.fileno(),它应该和 fi 是一样的。你只需要关闭那个文件描述符一次,所以第二个是正确的。

在Unix系统上,第一次会导致错误:

>>> f.close()
>>> os.close(fi)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 9] Bad file descriptor

撰写回答