【问题标题】:does closing a file opened with os.fdopen close the os-level fd?关闭用 os.fdopen 打开的文件会关闭操作系统级别的 fd 吗?
【发布时间】:2011-10-30 03:41:49
【问题描述】:
我正在使用tempfile.mkstemp() 创建一个临时文件。它返回一个操作系统级别的 fd 以及文件的路径。我想os.fdopen() os 级别的文件描述符写入它。如果我然后关闭os.fdopen() 返回的文件,操作系统级别的文件描述符会被关闭,还是我必须明确地os.close() 它?文档似乎没有明确说明发生了什么。
【问题讨论】:
标签:
python
file-io
operating-system
【解决方案1】:
我很确定 fd 将被关闭。如果你不想这样,你可以先复制它。当然,您总是可以很容易地对此进行测试。
测试是这样的:
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.")
这表明当文件对象关闭时,底层文件描述符也关闭了。