2011-09-18 23 views
9

मैंने हाल ही में ओएस स्विच किया है और एक नया पायथन (2.7) का उपयोग कर रहा हूं। मेरी पुरानी प्रणाली पर, मैं तत्काल प्रिंट करने में सक्षम था। उदाहरण के लिए, मान लीजिए मैं पाश के लिए एक computationally गहन था:वास्तविक समय में पायथन प्रिंट फ़ंक्शन

for i in range(10): 
    huge calculation 
    print i 

तो प्रत्येक पुनरावृत्ति पूरा कोड के रूप में, यह i

मुद्रित होगा हालांकि, मेरे वर्तमान प्रणाली पर, अजगर ताकि stdout कैश करने के लिए लगता है टर्मिनल कई मिनट के लिए रिक्त है, जिसके बाद यह प्रिंट करता है:

 
1 
2 
3 

लघु उत्तराधिकार में। फिर, कुछ और मिनटों के बाद, यह प्रिंट करता है:

 
4 
5 
6 

और इसी तरह। जैसे ही यह print कथन तक पहुंचता है, मैं पाइथन प्रिंट कैसे बना सकता हूं?

+0

हाँ ... वह पायथन नहीं है। –

उत्तर

8

कोशिश प्रिंट

import sys 

... 
sys.stdout.flush() 

के बाद stdout के फ्लश फोन या एक command line विकल्प -u जो उपयोग करने के लिए:

फोर्स stdin, stdout और stderr पूरी तरह से unbuffered किया जाना है। आप नए को बदलने के लिए

from __future__ import print_function 

(अपनी स्क्रिप्ट/मॉड्यूल के शीर्ष पर बयान डाल)

यह अनुमति देता है:

+0

धन्यवाद! यह काम करता है, लेकिन क्या आप जानते हैं कि मैं इसे स्वचालित रूप से कैसे सेट कर सकता हूं? – Rishi

+2

@ ऋषि: निकटतम आप इसे स्वचालित रूप से प्राप्त कर सकते हैं (बिना पाइथन के अपने संस्करण को संकलित करने के लिए) का उपयोग करने के लिए 'PYTHONUNBUFFERED' पर्यावरण चर सेट करना होगा। –

+0

जेफ की टिप्पणी मेरे लिए बहुत उपयोगी थी। धन्यवाद – Rishi

1

आयात नई print-as-function के रूप में अजगर 3.x में अपने आप के साथ प्रिंट फ़ंक्शन:

def print(s, end='\n', file=sys.stdout): 
    file.write(s + end) 
    file.flush() 

लाभ यह है कि इस तरह आपकी स्क्रिप्ट जब आप एक दिन पाइथन 3.x में अपग्रेड करते हैं तो वही काम करेगा।

Ps1: मैंने इसे आजमाया नहीं है, लेकिन प्रिंट-ए-फ़ंक्शन डिफ़ॉल्ट रूप से फ़्लश हो सकता है।

पीएस 2: आपको मेरी progressbar example में रुचि भी हो सकती है।

+0

क्षमा करें @ ऋषि, मैंने पिछले संस्करण को देखने के बाद शायद मेरे उत्तर का पुन: लिखने की पुष्टि की .. – Remi

6

पायथन 3.3 के बाद से, आप बस प्रिंट समारोह में flush=True पास कर सकते हैं।

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