2011-08-18 68 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