平台:Git bash MINGW64,Windows 7,64 CMD当我从Learn Python 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来解决这个问题.所以与这个问题不同
所以我看了一下这个并尝试了几种不同的方式来编写你所拥有的东西,他们都采取了同样的方式.再深入研究一下,我遇到了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