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

时间:2016-01-08 03:20:19

标签: python windows bash cmd

平台: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()

有人可以解释一下吗?

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

不同

1 个答案:

答案 0 :(得分:12)

所以我看了一下这个并尝试了几种不同的方式来编写你所拥有的东西,他们都采取了同样的方式。我进一步深入研究https://code.google.com/p/mintty/issues/detail?id=218。关键是andy.koppe的回复:

  

问题的关键是stdout的默认缓冲模式取决于设备的类型:为控制台缓冲,为管道缓冲。这意味着在控制台中输出将立即显示,而在一定程度上它只会在缓冲区已满或刷新时出现,如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中运行它,这将阻止python缓冲mingw中的输出。

python -u file.py