time.sleep()在python shell中的工作方式与在命令窗口中的工作方式不同

时间:2014-05-19 13:40:20

标签: python

我有这段代码:

print(nextaction + ' ', end="")
time.sleep(2)
print(nextplayer+"'s ", end="")
time.sleep(1)
print(nextitem + '!')
time.sleep(3) 

当我在shell中使用F5运行它时,它可以正常工作并暂停给定的秒数。但是当我在命令窗口中运行时,只需双击文件夹中的PGM,它只会执行第一次pauze(打印行之前),然后立即打印所有内容。

为了清楚起见,最终的行总是类似于"杀死迈克的狗!"。但我希望每个单词之间都有一个pauze。

我不知道为什么会这样。

3 个答案:

答案 0 :(得分:2)

命令窗口有一个缓冲区,在一定数量的字符之后或在每个新行中刷新。在这里你没有足够的角色或新线来执行它,所以你需要强制它:

import sys
print(nextaction + ' ', end="")
sys.stdout.flush()
time.sleep(2)
# Also possible inline through the print function (Python 3 only)
print(nextplayer+"'s ", end="", flush=True)
time.sleep(1)
print(nextitem + '!')  # Should not be useful there, since there is the \n
time.sleep(3) 

另请参阅:How to flush output of Python print?

答案 1 :(得分:1)

您需要刷新输出。在REPL中,输出会自动刷新以允许打印提示。

答案 2 :(得分:1)

您需要刷新输出,因为命令行不会自动为您执行此操作(除非有换行符或已将一定数量的字符写入sys.stdout)。 print()函数有一个可选参数,允许您指定是否刷新它。

print(nextaction, end=' ', flush=True)
time.sleep(2)
print(nextplayer, end="'s", flush=True)
time.sleep(1)
print(nextitem+'!', flush=True) # there is a newline, so no need to flush it
time.sleep(3)