2011-08-18 10 views
9

मैं tempfile.mkstemp() के साथ एक अस्थायी फ़ाइल बना रहा हूं। यह फ़ाइल के पथ के साथ एक ओएस-स्तर एफडी देता है। मैं os.fdopen() ओएस-स्तरीय फ़ाइल डिस्क्रिप्टर को लिखना चाहता हूं। यदि मैं उस फ़ाइल को बंद करता हूं जो os.fdopen() लौटाया गया है, तो क्या ओएस-स्तरीय फ़ाइल डिस्क्रिप्टर बंद हो जाएगा, या क्या मुझे यह स्पष्ट रूप से os.close() करना होगा? दस्तावेज़ों को यह नहीं लगता कि स्पष्ट रूप से क्या होता है।os.fdopen के साथ खोला गया फ़ाइल बंद करने से ओएस-स्तर एफडी बंद हो जाता है?

उत्तर

9

मुझे पूरा यकीन है कि एफडी बंद हो जाएगा। यदि आप नहीं चाहते हैं कि आप इसे पहले डुप्लिकेट कर सकें। बेशक आप हमेशा आसानी से इसका परीक्षण कर सकते हैं।

टेस्ट इस तरह है:

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

संबंधित मुद्दे