¿Cuál de las siguientes opciones es más correcta?python: ¿necesito cerrar el archivo de mkstemp si uso fdopen?
fi, path = tempfile.mkstemp()
f = os.fdopen(fi, "w")
f.write(res)
f.close()
os.close(fi)
o:
fi, path = tempfile.mkstemp()
f = os.fdopen(fi, "w")
f.write(res)
f.close()
Gotcha. un poco confuso: abrir dos veces, cerrar una vez. pero entiendo la idea – Claudiu
'os.fdopen()' no necesariamente abre el descriptor del archivo, simplemente devuelve un objeto de archivo abierto para el archivo desciptor. Si el descriptor de archivo ya está abierto, no lo abrirá nuevamente. –
@Claudiu: Se debe a que el sistema operativo hace una diferencia entre los * descriptors * del archivo (que son objetos del nivel del sistema operativo) y los * streams * del archivo * (que son objetos a nivel de la biblioteca). 'fopen' (' open' en Python) abre un descriptor, luego abre una secuencia usando este descriptor. 'fdopen' abre una nueva secuencia usando un descriptor existente. 'fclose' (' file.close' en Python) cierra una secuencia y su descriptor subyacente. – millimoose