2011-08-18 72 views
9

我正在製作一個臨時文件tempfile.mkstemp()。它返回一個os級別的fd以及文件的路徑。我想要os.fdopen()的os級文件描述符寫入它。如果我然後關閉os.fdopen()返回的文件,OS級文件描述符是否會關閉,還是我必須明確地指定os.close()?文檔似乎沒有說明明確發生了什麼。是否關閉用os.fdopen打開的文件關閉os級別的fd?

回答

9

我很確定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.") 

這表明,當文件對象關閉了底層的文件描述符被關閉。

+0

感謝您的支持! – dimo414