का उपयोग sys.stdout.flush()
क्या करता है?sys.stdout.flush() विधि
उत्तर
पायथन का मानक आउट buffered है (जिसका अर्थ यह है कि यह टर्मिनल को लिखने से पहले मानक "मानक" के कुछ डेटा एकत्र करता है)। कॉलिंग sys.stdout.flush()
इसे बफर को "फ्लश" करने के लिए मजबूर करता है, जिसका अर्थ यह है कि यह बफर में टर्मिनल में सब कुछ लिख देगा, भले ही सामान्यतः ऐसा करने से पहले प्रतीक्षा करें।
यहाँ के बारे में (अन) बफ़र आई/ओ कुछ अच्छी जानकारी है और क्यों उपयोग करें:
http://en.wikipedia.org/wiki/Data_buffer
Buffered vs unbuffered IO
यह विंडोज़ पर काम नहीं करता है !!! –
@Ciastopiekarz हम बफर को खिड़कियों पर फिसलने के लिए क्या कर सकते हैं? – helplessKirk
@Ciastopiekarz आप कैसे समझते हैं? अगर मैं एंड्रयू क्लार्क की पायथन लिपि लेता हूं, और 'sys.stdout.write ("% d"% i)' के साथ प्रिंट लाइन को प्रतिस्थापित करता हूं, तो मुझे कॉल प्राप्त करने के लिए 'sys.stdout.flush()' पर कॉल को अपूर्ण करना होगा। स्क्रिप्ट निष्पादित होने के रूप में प्रदर्शित करने के लिए बफर। –
निम्नलिखित सरल अजगर स्क्रिप्ट पर विचार करें:
import time
import sys
for i in range(5):
print i,
#sys.stdout.flush()
time.sleep(1)
यह एक संख्या पाँच सेकंड के लिए हर दूसरे मुद्रित करने के लिए डिज़ाइन किया गया है, लेकिन अगर आप इसे चलाने के रूप में यह अब है (आपके डिफ़ॉल्ट प्रणाली बफरिंग के आधार पर) आप कर सकते हैं स्क्रिप्ट पूर्ण होने तक कोई आउटपुट नहीं दिखता है, और फिर सभी एक बार आपको स्क्रीन पर मुद्रित 0 1 2 3 4
दिखाई देंगे।
ऐसा इसलिए है क्योंकि आउटपुट buffered किया जा रहा है, और जब तक आप प्रत्येक print
के बाद sys.stdout
फ्लश नहीं करते हैं तो आप तुरंत आउटपुट नहीं देख पाएंगे। अंतर देखने के लिए sys.stdout.flush()
लाइन से टिप्पणी हटाएं।
पायथन 3.x में, 'प्रिंट i' को प्रिंट के साथ प्रतिस्थापित किया जाना चाहिए (i, end = '') क्योंकि पायथन 3 में प्रिंट() में एक डिफ़ॉल्ट उपसर्ग अंत = '\ n' है जो कंसोल को फ्लश करने के लिए संकेत देता है। –
मुझे बस यह समस्या थी! स्पष्टीकरण के लिए बहुत बहुत धन्यवाद यह क्यों हल करता है! –
मेरी समझ, कभी हम पर अमल प्रिंट बयान उत्पादन बफ़र होना लिखा जाएगा जब अनुसार। और बफर को फिसलने (साफ़) होने पर हम स्क्रीन पर आउटपुट देखेंगे। जब प्रोग्राम निकलता है तो डिफ़ॉल्ट बफर द्वारा फ़्लश किया जाएगा। लेकिन हम कार्यक्रम में "sys.stdout.flush()" कथन का उपयोग करके मैन्युअल रूप से बफर को भी फ्लश कर सकते हैं। नीचे दिए गए कोड बफर को तब तक फ़्लश किया जाएगा जब मैं पहुंचता हूं 5.
आप नीचे दिए गए कोड को निष्पादित करके समझ सकते हैं।
chiru @ ऑनलाइन: ~ $ बिल्ली flush.py
import time
import sys
for i in range(10):
print i
if i == 5:
print "Flushing buffer"
sys.stdout.flush()
time.sleep(1)
for i in range(10):
print i,
if i == 5:
print "Flushing buffer"
sys.stdout.flush()
chiru @ ऑनलाइन: ~ $
***** आउटपुट *****
chiru @ ऑनलाइन: ~ $ अजगर flush.py
0 1 2 3 4 5 Flushing buffer
6 7 8 9 0 1 2 3 4 5 Flushing buffer
6 7 8 9
chiru @ ऑनलाइन: ~ $
import sys
for x in range(10000):
print "HAPPY >> %s <<\r" % str(x),
sys.stdout.flush()
देखें: http://stackoverflow.com/questions/230751/how-to-flush-output-of-python-print – nitin