2016-01-08 5 views
5

प्लेटफ़ॉर्म: गिट बैश MINGW64, विंडोज 7, 64 सीएमडी जब मैं Learn Python The Hard Way ex11 से पाइथन कोड चलाता हूं। कोड सरल है।सीएमडी और गिट बैश का एक अलग परिणाम होता है जब पाइथन कोड

print "How old are you?", 
age = raw_input() 
print "How tall are you?", 
height = raw_input() 
print "How much do you weigh?", 
weight = raw_input() 

print "So, you're %r old, %r tall and %r heavy." % (
    age, height, weight) 

लेकिन उनके पास सीएमडी और गिट बैश में अलग-अलग परिणाम हैं। जब मैं इसे गिट बैश का उपयोग करके चलाता हूं, तो raw_print() पहले चलाएगा।

जब आप 3 उत्तरों इनपुट करते हैं, तो यह अंत में 4 प्रिंट दिखाएगा। जब मैं इसे सीएमडी में चलाता हूं, तो यह सामान्य रूप से दिखाता है, एक प्रिंट, एक raw_input()

क्या कोई इसे समझा सकता है?

संपादित करें: दरअसल, मेरा लक्ष्य कारणों की व्याख्या करना है, फ्लश के साथ इसे हल नहीं करना है। तो यह this question

+0

[अजगर प्रिंट के उत्पादन में फ्लश करने के लिए कैसे?] (Http://stackoverflow.com/questions/230751/how-to-flush-output-of-python-print) –

+1

@KevinGuan मैं के संभावित डुप्लिकेट इसे संपादित किया है असल में, मेरा लक्ष्य कारणों को समझाना है, फ्लश के साथ इसे हल नहीं करना है। तो यह एक और सवाल के साथ अलग है। Answerer MitchPomery से बफरिंग मोड कुंजी मारा। – naifan

उत्तर

8

से अलग है इसलिए मैंने इसे देखा और आपके पास जो कुछ है, उसे लिखने के कुछ अलग-अलग तरीकों की कोशिश की, और वे सभी एक ही तरीके से काम करते थे। इसमें कुछ और खोदने के बाद मैं https://code.google.com/p/mintty/issues/detail?id=218 पर आया। एक कंसोल के लिए unbuffered, एक पाइप के लिए बफ़र:

समस्या की कुंजी है कि stdout के डिफ़ॉल्ट बफरिंग मोड डिवाइस के प्रकार पर निर्भर है: इस से कुंजी andy.koppe जबाब है। इसका मतलब है कि एक कंसोल में आउटपुट तुरंत दिखाई देगा, जबकि मिनीटी में यह केवल तभी दिखाई देगा जब बफर या तो पूर्ण या फ्लश हो, जैसा कि मुख्य() के अंत में होता है।

विंडोज कंसोल जितनी जल्दी हो सके स्क्रीन पर पाठ प्रिंट करता है, जबकि mingw (git bash) तब तक इंतजार करेगा जब तक एप्लिकेशन स्क्रीन को अपडेट करने के लिए कहता है।

तो इसे दोनों में व्यवहार करने के लिए, आपको प्रत्येक प्रिंट के बाद बफर को स्क्रीन पर फ़्लश करने की आवश्यकता होगी। How to flush output of Python print? ऐसा करने के तरीके के बारे में जानकारी है, लेकिन यह निम्न करने के लिए नीचे आता है:

import sys 

print "How old are you?" 
sys.stdout.flush() 
age = raw_input() 
print "How tall are you?" 
sys.stdout.flush() 
height = raw_input() 
print "How much do you weigh?" 
sys.stdout.flush() 
weight = raw_input() 

print "So, you're %r old, %r tall and %r heavy." % (age, height, weight) 

वैकल्पिक रूप से आप -u आदेश है, जो MinGW में आउटपुट बफ़र से अजगर बंद हो जाएगा का उपयोग कर MinGW में चला सकते हैं।

python -u file.py 
+2

Thx। यह मेरी समस्या हल है। बफरिंग मोड। – naifan

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