python:如果我使用fdopen,是否需要关闭mkstemp的文件?
以下哪种写法更正确呢?
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