2016-01-08 17 views
5

平台:Git bash MINGW64,Windows 7,64 CMD 当我从Learn Python The Hard Way ex11运行Python代码时。代码很简单。当运行Python代码时,Cmd和Git bash有不同的结果

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) 

但它们在CMD和Git bash中有不同的结果。当我使用Git bash运行它时,raw_print()将首先运行。

当您输入3个答案时,最后会显示4个打印。当我在CMD中运行它时,它通常显示一个打印,一个raw_input()

有人可以解释吗?

编辑:其实我的目标是解释原因,而不是用flush来解决这个问题。所以它与this question不一样

+0

【如何刷新蟒纹的输出?](http://stackoverflow.com/questions/230751/how-to-flush-output-of-python-print) –

+1

@KevinGuan我的可能的复制已编辑它。其实,我的目标是解释原因,而不是用冲水来解决这个问题。所以它与另一个问题是不同的。来自回答者MitchPomery的缓冲模式击中了关键。 – naifan

回答

8

所以我看了一下这个,试着用几种不同的方式来写你在那里的东西,他们都以相同的方式行事。深入挖掘,我遇到了https://code.google.com/p/mintty/issues/detail?id=218。这里的关键是andy.koppe的回复:

问题的关键是stdout的默认缓冲模式取决于设备的类型:无缓冲的控制台,管道缓冲。这意味着在控制台中,输出将立即显示,而在mintty中,只有在缓冲区已满或刷新后才会出现,如main()的结尾处所示。

Windows控制台尽快打印文本到屏幕上,而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

相关问题