Które z poniższych jest bardziej poprawne?python: trzeba zamknąć plik z mkstemp jeśli używam fdopen?
fi, path = tempfile.mkstemp()
f = os.fdopen(fi, "w")
f.write(res)
f.close()
os.close(fi)
czyli
fi, path = tempfile.mkstemp()
f = os.fdopen(fi, "w")
f.write(res)
f.close()
Gotcha. nieco mylące: otwórz dwa razy, zamknij raz. ale mam pomysł – Claudiu
'os.fdopen()' niekoniecznie otwiera deskryptor pliku, po prostu zwraca otwarty obiekt pliku dla desciptora pliku. Jeśli deskryptor pliku jest już otwarty, nie otworzy go ponownie. –
@Claudiu: To dlatego, że OS robi różnicę między deskryptorami plików * (które są obiektami na poziomie OS) i plikami * strumieniami * (które są obiektami poziomu libc). 'fopen' (' open' w języku Python) otwiera deskryptor, a następnie otwiera strumień za pomocą tego deskryptora. 'fdopen' otwiera nowy strumień przy użyciu istniejącego deskryptora. 'fclose' (' file.close' w Pythonie) zamyka strumień i jego bazowy deskryptor. – millimoose