निम्नलिखित में से कौन सा सही है?पायथन: अगर मैं fdopen का उपयोग करता हूं तो mkstemp से फ़ाइल को बंद करने की आवश्यकता है?
fi, path = tempfile.mkstemp()
f = os.fdopen(fi, "w")
f.write(res)
f.close()
os.close(fi)
या:
fi, path = tempfile.mkstemp()
f = os.fdopen(fi, "w")
f.write(res)
f.close()
पकड़ लिया। थोड़ा उलझन में: दो बार खुलें, एक बार बंद करें। लेकिन मुझे लगता है कि – Claudiu
'os.fdopen()' फ़ाइल डिस्क्रिप्टर को जरूरी नहीं है, यह फ़ाइल desciptor के लिए एक खुली फ़ाइल ऑब्जेक्ट देता है। अगर फ़ाइल डिस्क्रिप्टर पहले से ही खुला है तो यह इसे फिर से नहीं खोल पाएगा। –
@ क्लाउडियो: ऐसा इसलिए है क्योंकि ओएस फ़ाइल * डिस्क्रिप्टर * (जो ओएस-स्तरीय ऑब्जेक्ट्स) के बीच एक अंतर बनाता है, और फ़ाइल * स्ट्रीम * (जो libc-level ऑब्जेक्ट्स हैं)। 'fopen' (पायथन में' खुला ') एक वर्णक खोलता है, फिर इस वर्णनकर्ता का उपयोग करके एक स्ट्रीम खोलता है। 'fdopen' मौजूदा डिस्क्रिप्टर का उपयोग करके एक नई स्ट्रीम खोलता है। पायथन में 'fclose' ('file.close') एक स्ट्रीम और इसके अंतर्निहित वर्णनकर्ता को बंद कर देता है। – millimoose