运行Python代码时Cmd和Git bash会有不同的结果


问题内容

平台:Git bash MINGW64,Windows 7、64 CMD当我从Learn Python The Hard Way
ex11中
运行Python代码时。代码很简单。

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()

有人可以解释吗?

编辑:实际上,我的目标是解释原因,而不是用冲洗解决问题。所以这个问题不一样


问题答案:

因此,我对此进行了研究,并尝试了几种不同的方式来编写您所拥有的内容,并且它们的行为方式都相同。深入研究它,我遇到了https://code.google.com/p/mintty/issues/detail?id=218。关键是andy.koppe的回复:

该问题的关键在于stdout的默认缓冲模式取决于设备的类型:对于控制台是无缓冲的,对于管道是缓冲的。这意味着在控制台中,输出将立即显示,而在薄荷糖中,则仅在缓冲区已满或刷新后才显示,如main()末尾所示。

Windows控制台会尽快在屏幕上打印文本,而mingw(git bash)将等到应用程序告诉它更新屏幕。

因此,要使其在两种情况下均表现相同,您将需要在每次打印后将缓冲区刷新到屏幕上。如何刷新Python打印输出?有有关如何执行此操作的信息,但可归结为以下内容:

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中运行它,这将阻止python在mingw中缓冲输出。

python -u file.py