2010-03-15 13 views

उत्तर

27

हां। यह अंतर्निहित close() फ़ंक्शन का उपयोग करता है जो आपके लिए करता है (source)।

+2

(दूसरे शब्दों में: वह फ़ाइल I/O buffered है जो बड़े पैमाने पर आपके द्वारा छिपी हुई है और छिपी हुई है। 'ओपन', 'लिखना', 'क्लोज़' करने से सामान को अनदेखा नहीं करना चाहिए जैसा कि आप पहले से ही चाहते हैं 'लिखो'। एक बफर जो नियमित रूप से उस पर फेंक दिया जाता है, वह बहुत खराब डिजाइन [या भूखे बफर] होगा।) – Joey

+1

धन्यवाद, यह मेरा अनुमान भी था। लेकिन क्या यह सच क्रॉस-प्लेटफार्म, क्रॉस-ओएस और क्रॉस-लैंग्वेज है? –

+0

@ एडम मटन: यही कारण है कि पाइथन सी पुस्तकालयों के शीर्ष पर बैठता है। यह सुनिश्चित करने के लिए कि "यह वास्तविक क्रॉस-प्लेटफ़ॉर्म, क्रॉस-ओएस"। मुझे नहीं पता कि "क्रॉस-भाषा" का क्या अर्थ है। –

14

एनबी: close() और flush() यह सुनिश्चित नहीं करेगा कि डेटा वास्तव में डिस्क पर सुरक्षित है। यह सिर्फ यह सुनिश्चित करता है कि ओएस में डेटा == है कि यह प्रक्रिया के अंदर buffered नहीं है।

डिस्क पर लिखे गए डेटा को प्राप्त करने के लिए आप सिंक या fsync को आजमा सकते हैं।

+0

सच है, लेकिन क्या आधुनिक ओएस प्रक्रिया समाप्त होने पर डिस्क पर डेटा नहीं लिखता है? –

+0

उस समय के पैमाने पर निर्भर करता है जिनके बारे में आप बात कर रहे हैं। जैसे ext4 के कुछ संस्करण डिस्क पर अपना डेटा करने से पहले पूरे सेकंड प्रतीक्षा कर सकते हैं। –

+0

+1 यदि परिमाण का क्रम सेकंड है, तो मैं काफी सुरक्षित हूं। धन्यवाद! –

-5

filehandle.close आवश्यक रूप से फ्लश नहीं करता है। आश्चर्य की बात है, filehandle.flush या तो मदद नहीं करता --- यह अभी भी ओएस बफर में फंस सकता है जब पाइथन चल रहा है। इस सत्र जहां मैं एक फाइल करने के लिए लिखा था का निरीक्षण करें, यह और खोल कमांड प्रॉम्प्ट के लिए Ctrl-Z बंद कर दिया और फाइल की जांच की:

$ cat xyz 
ghi 
$ fg 
python 

>>> x=open("xyz","a") 
>>> x.write("morestuff\n") 
>>> x.write("morestuff\n") 
>>> x.write("morestuff\n") 
>>> x.flush 
<built-in method flush of file object at 0x7f58e0044660> 
>>> x.close 
<built-in method close of file object at 0x7f58e0044660> 
>>> 
[1]+ Stopped     python 
$ cat xyz 
ghi 

इसके बाद मैं फ़ाइल फिर से खोलना कर सकते हैं और जरूरी है कि फ़ाइल सिंक करता है (क्योंकि, में इस मामले में, मैं इसे संलग्न मोड में खोलता हूं)। जैसा कि अन्य ने कहा है, सिंक सिस्कल (ओएस पैकेज से उपलब्ध) को सभी बफर डिस्क पर फ्लश करना चाहिए, लेकिन इसमें सिस्टम-व्यापी प्रदर्शन प्रभाव संभव है (यह सिस्टम पर सभी फाइलों को सिंक करता है)।

+13

एचएम - मुझे आपकी समस्या पर संदेह है कि आपने वास्तव में ** ** फ्लश() 'या' क्लोज़() 'कॉल नहीं किया है - आप अभी अपना प्रतिनिधित्व प्रदर्शित कर चुके हैं! उन तरीकों को कॉल करने के लिए आपको माता-पिता की आवश्यकता है। –

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