我正在使用tempfile.mkstemp()
创建临时文件。它会返回一个操作系统级别的fd及其文件路径。我想要使用os.fdopen()
打开这个操作系统级别的文件描述符来写入数据。如果我关闭os.fdopen()
返回的文件,操作系统级别的文件描述符是否也会被关闭?还是我需要显式地使用os.close()
关闭它?文档好像并没有明确说明会发生什么。
我正在使用tempfile.mkstemp()
创建临时文件。它会返回一个操作系统级别的fd及其文件路径。我想要使用os.fdopen()
打开这个操作系统级别的文件描述符来写入数据。如果我关闭os.fdopen()
返回的文件,操作系统级别的文件描述符是否也会被关闭?还是我需要显式地使用os.close()
关闭它?文档好像并没有明确说明会发生什么。
我相当确信这个文件描述符会被关闭。 如果你不想这样,你可以先复制它。 当然,你随时可以很容易地测试这一点。
测试方法如下:
from __future__ import print_function
import os
import tempfile
import errno
fd, tmpname = tempfile.mkstemp()
fo = os.fdopen(fd, "w")
fo.write("something\n")
fo.close()
try:
os.close(fd)
except OSError as oserr:
if oserr.args[0] == errno.EBADF:
print ("Closing file has closed file descriptor.")
else:
print ("Some other error:", oserr)
else:
print ("File descriptor not closed.")
这表明当文件对象关闭时,底层文件描述符也会被关闭。