使用os.fdopen打开的文件,关闭它会同时关闭操作系统级别的文件描述符吗?

14

我正在使用tempfile.mkstemp()创建临时文件。它会返回一个操作系统级别的fd及其文件路径。我想要使用os.fdopen()打开这个操作系统级别的文件描述符来写入数据。如果我关闭os.fdopen()返回的文件,操作系统级别的文件描述符是否也会被关闭?还是我需要显式地使用os.close()关闭它?文档好像并没有明确说明会发生什么。

1个回答

10

我相当确信这个文件描述符会被关闭。 如果你不想这样,你可以先复制它。 当然,你随时可以很容易地测试这一点。

测试方法如下:

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.")

这表明当文件对象关闭时,底层文件描述符也会被关闭。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接