Что такое os.close (3) для?что такое os.close (3) для?
Я читаю python cookbook 2nd глава 2.9, в котором объясняется, как работает файл zip python. В нем есть один фрагмент кода, который я действительно не получил.
import zipfile, tempfile, os, sys
handle, filename = tempfile.mkstemp('.zip')
os.close(handle) # <- handle is int 3 here
z = zipfile.ZipFile(filename, 'w')
z.writestr('hello.py', 'def f(): return "hello world from "+__file__\n')
z.close()
sys.path.insert(0, filename)
import hello
print hello.f()
os.unlink(filename)
os.close() В Python объяснения Документов:
Эта функция предназначена для низкого уровня ввода/вывод и должна быть применена к дескриптору файла, как возвращаемый os.open() или труба(). Чтобы закрыть «файл-объект», возвращаемый встроенной функцией open() или popen() или fdopen(), используйте метод close().
Дескриптор файла в Linux от 0,1 & 2, стандартный ввод, стандартный вывод & stderror, я не понимаю, что файловый дескриптор 3 для? Хотя я прочитал это «What is the file descriptor 3 assigned by default?».
Я комментирую os.close(handle)
, но выход не отличается.
Вы получили 'handle' из' tempfile.mkstemp', так почему бы вам не прочитать документы для этого? Очевидно, что вы закрываете временный файл, почему вы ожидаете, что он будет одним из трех стандартных дескрипторов файлов in/out/err? Кроме того, вы должны прочитать руководство по стилю: http://www.python.org/dev/peps/pep-0008/. – jonrsharpe
В '3' нет ничего волшебного - если ваша программа была запущена с уже используемым FD 3 или ранее была назначена эта номер дескриптора при открытии другого файла (и этот файл не был закрыт), вы бы получили здесь назначается другой номер дескриптора. –
Ответы на вопросы не касаются того, что, хотя вы можете отсоединить файл (например, удалить его имя из списка каталогов), его содержимое не исчезнет, а у кого-то еще есть дескриптор.В частности, пространство не освобождается. (Обычный реальный случай: «Я удалил файл журнала 3 gig, почему я не получил 3-х гигабайт свободного места?» - «Поскольку у вашего prorgam все еще есть удаленный файл open».) –