2014-10-09 11 views
6

से वास्तविक समय प्रिंट बयान प्राप्त करने के लिए मैं एक अजगर स्क्रिप्ट है कि कुछ इस तरह दिखता है:टी का उपयोग अजगर

$ python my.py | tee my_file.txt 

हालांकि:

for item in collection: 
    print "what up" 
    #do complicated stuff that takes a long time. 

बैश में, मैं निम्न कार्य करके इस स्क्रिप्ट को चलाने , प्रोग्राम में खत्म होने तक मैं बैश में देखता हूं एक खाली रेखा है। फिर, सभी प्रिंट स्टेटमेंट सभी एक में आते हैं।

क्या यह टी के अपेक्षित संचालन है? क्या मैं रीयल-टाइम में आउटपुट देखने के लिए टी का उपयोग कर सकता हूं?

+0

इस अजगर के साथ कोई समस्या होने जा रहा है। यह जानबूझकर है। यह बस यह पता लगा रहा है कि आउटपुट टर्मिनल पर नहीं जा रहा है, इसलिए यह बफरिंग है। आपको बफरिंग बंद करना होगा। यह कैसे करें शायद stackexchange.com – Patrick

+1

के लिए बेहतर अनुकूल हो सकता है इससे मदद मिल सकती है: http://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe – Ketan

+1

शीर्ष पर "आयात sys '" और प्रिंट स्टेटमेंट के नीचे इंडेंट लाइन पर "sys.stdout.flush()' " – Anthon

उत्तर

15

पाइथन, कई कार्यक्रमों की तरह, write सिस्टम कॉल को कॉल करने की संख्या को कम करने की कोशिश करता है। यह वास्तव में उन्हें मानक आउटपुट फ़ाइल में लिखने से पहले कई print कथन के आउटपुट एकत्र करके ऐसा करता है। इस प्रक्रिया को आउटपुट बफरिंग कहा जाता है।

जब पाइथन टर्मिनल से कनेक्ट होता है, तो यह इसके आउटपुट को बफर नहीं करता है। यह समझ में आता है, क्योंकि टर्मिनल पर मानव तुरंत आउटपुट देखना चाहता है।

जब पायथन फ़ाइल (या एक पाइप) पर लिख रहा है, तो यह इसके आउटपुट को बफर करता है। यह भी समझ में आता है, क्योंकि प्रक्रिया पूरी होने तक उत्पादन को कोई भी नहीं देखेगा

जब भी आप पाइथन को अपनी मानक आउटपुट फ़ाइल में अपने buffered आउटपुट को लिखने के लिए मजबूर करना चाहते हैं तो आप sys.stdout.flush() पर कॉल करके इस अनुकूलन को पराजित कर सकते हैं।

आपके मामले में, इस प्रयास करें:

import sys 
... 
for item in collection: 
    print "what up" 
    sys.stdout.flush() 
    #do complicated stuff that takes a long time. 
+0

महान स्पष्टीकरण! मैं जोड़ूंगा कि स्क्रिप्ट को 'ध्वज' के साथ बुलाकर आपकी समस्या का समाधान भी होगा, उदा। 'python -u my.py | tee my_file.txt' – BiBi

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