2010-12-16 16 views
11

मैं अजगर 3.1 पर एक साधारण प्रोग्राम लिख रहा था और मैं इस पर ठोकर खाई:python3 नींद() समस्या

मैं निष्क्रिय यह अपेक्षित तरीके से काम पर इस चलाते हैं - प्रिंट "Initializing." और फिर दो डॉट्स, हर एक के बाद एक कहते हैं दूसरा, और इनपुट के लिए इंतजार कर रहा है।

from time import sleep 

def initialize(): 
    print('Initializing.', end='') 
    sleep(1) 
    print(" .", end='') 
    sleep(1) 
    print(" .", end='') 
    input() 

initialize() 

समस्या यह है कि जब मैं .py डबल क्लिक करें फ़ाइल निष्पादित करने के लिए, यह pythonw.exe के बजाय python.exe पर चलता है, और अजीब बातें होती हैं: यह सब sleep() बार यानी मुझे बनाता मिलती है 2 सेकंड तक प्रतीक्षा करें, और फिर एक बार में पूरी स्ट्रिंग Initializing. . . प्रिंट करें। ऐसा क्यों होता है? क्या टर्मिनल में होने से बचने का कोई तरीका है? अगर मैं विंडोज़ और लिनक्स दोनों में आईडीएलई का उपयोग करता हूं तो यह ठीक काम करता है।

+2

मैं कारण यह बफरिंग है कल्पना क्योंकि आप इसे एक '\ n' अभी तक नहीं दिया है है। आम तौर पर 'एंड' का उपयोग इंगित करेगा कि आप आगे बढ़ रहे हैं और कुछ लिख रहे हैं। –

उत्तर

21

इसका कारण यह है उत्पादन बफ़र जा रहा है।

आप एक sys.stdout.flush() जोड़ना चाहिए के बाद प्रत्येक लिखने

+0

धन्यवाद, यह हल हो गया! – roddds

+1

और, 4 वर्षों के बाद, मैंने अभी देखा है कि मैंने इसे वास्तव में स्वीकार किए गए उत्तर के रूप में कभी नहीं सेट किया है। – roddds

+5

पायथन 3 के 'प्रिंट' फ़ंक्शन का उपयोग करके, आप 'फ्लश' पैरामीटर का भी उपयोग कर सकते हैं, उदा। 'प्रिंट ("। ", एंड = '', फ्लश = ट्रू)' –

5

ऐसा लगता है कि अंतर यह है कि आईडीडीई में स्टडआउट स्वचालित रूप से फ़्लश किया जा रहा है। दक्षता के लिए, प्रोग्रामिंग भाषाएं अक्सर स्क्रीन पर लिखने से पहले प्रिंट कॉल का एक गुच्छा बचाती हैं, जो एक धीमी प्रक्रिया है।

यहाँ एक और सवाल जवाब आप की जरूरत है कि क्या है: How to flush output of Python print?

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