运行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()将首先运行。

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

有人可以解释吗?

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

Solutions Collecting From Web of "运行Python代码时,Cmd和Git bash有不同的结果"

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

问题的关键是标准输出的默认缓冲模式取决于设备的类型:缓冲控制台的缓冲区,为管道缓冲。 这意味着在控制台中输出将立即出现,而在mintty中,只有当缓冲区满或刷新时才会出现,就像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中运行它,这将在mingw中停止python缓冲输出。

 python -u file.py