2011-08-18 25 views
9

tempfile.mkstemp()で一時ファイルを作成しています。これはファイルへのパスとともにosレベルのfdを返します。私はos.fdopen() osレベルのファイル記述子に書きたいと思う。 os.fdopen()が返されたファイルを閉じると、osレベルのファイル記述子が閉じられるか、それとも明示的にos.close()にする必要がありますか?ドキュメントは明示的に何が起こるかを言わないようです。os.fdopenで開いたファイルを閉じると、os-level 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

関連する問題