关闭一个用os.fdopen打开的文件关闭os级别的fd?

时间:2011-08-18 20:57:41

标签: python file-io operating-system

我正在使用tempfile.mkstemp()创建一个临时文件。它返回一个os级别的fd以及该文件的路径。我想os.fdopen() os级文件描述符写入它。如果我然后关闭os.fdopen()返回的文件,是否会关闭os级文件描述符,还是必须显式os.close()?文档似乎没有说明明确发生了什么。

1 个答案:

答案 0 :(得分:10)

我很确定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.")

这表明文件对象关闭时底层文件描述符已关闭。