2011-08-18 9 views
9

Sto creando un file temporaneo con tempfile.mkstemp(). Restituisce un os-level fd insieme al percorso del file. Voglio os.fdopen() il descrittore di file di livello OS per scrivere su di esso. Se poi chiudo il file restituito da os.fdopen(), il descrittore del file di os-level sarà chiuso, o devo esplicitamente fare os.close()? I documenti non sembrano dire cosa succede esplicitamente.chiude un file aperto con os.fdopen chiude il livello os fd?

risposta

9

Sono abbastanza sicuro che la fd sarà chiusa. Se non vuoi che tu possa farlo prima. Certo, puoi sempre testarlo abbastanza facilmente.

di prova è come questo:

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

il che dimostra che il descrittore di file sottostante viene chiuso quando l'oggetto file viene chiuso.

+0

Grazie per questo! – dimo414