закрытие файла, открытого с помощью os.fdopen, закрывает os-level fd? - PullRequest
10 голосов
/ 19 августа 2011

Я делаю временный файл с tempfile.mkstemp(). Он возвращает os-уровень fd вместе с путем к файлу. Я хочу os.fdopen() дескриптор файла уровня os для записи в него. Если я затем закрою файл, который вернул os.fdopen(), будет ли закрыт файловый дескриптор уровня os или я должен os.close() явно? Документы, кажется, не говорят, что происходит явно.

1 Ответ

10 голосов
/ 19 августа 2011

Я почти уверен, что 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.")

Что показывает, что основной файловый дескриптор закрыт, когда объект файла закрыт.

...