Python中的实时输出

4
在我的python代码中有以下内容:
print "Hello"
time.sleep(20)
print "world"

我期望的输出是:
Hello 

然后20秒之后

world

但是在控制台中,Helloworld同时打印。


3
“同时”是指两者完全没有延迟,还是它们一起被延迟?此外,请提供一个精确完整的示例(以下示例不完整,因为缺少“import”语句),并验证该示例是否能够复现该问题。 - Charles Duffy
time.sleep() 函数需要传入秒数还是毫秒数? - Patashu
可能是您没有导入时间模块,所以在等待20秒时出现了NameError错误。 - Patashu
3
为什么它会打印出“world”?为什么在调用 time.sleep(20) 时没有出现 NameError 错误?我不认为这是问题所在。 - Ken Bellows
使用sys、os和time模块导入Python代码。time.sleep(20)表示等待20秒。首先在控制台中输出“Hello”,然后等待20秒后输出“world”。 - gmanikandan
3个回答

5

print操作符有效地使用缓冲的sys.stdout流进行输出。 对于实时输出,您需要使用未缓冲的sys.stderr流:

import sys, time
sys.stderr.write("Hello ")
time.sleep(20)
sys.stderr.write("world\n")

或者,您可以通过每次调用sys.stdout.flush()手动刷新流缓冲区来获取输出,但我建议您不要这样做,除非您知道自己在做什么。

有关更多详细信息,请参阅标准流(stdin、stdout和stderr)的维基百科文章


1

你的代码在我的电脑上可行。你可以尝试在打印hello后直接刷新标准输出(stdout)。

import sys
sys.stdout.flush()

我的代码有太多的打印命令,所以我必须在每个打印命令后面加上 "sys.stdout.flush()"。还有其他的方法吗? - gmanikandan

-1
请确保您已从Python导入time库,并在两个版本的Python上尝试,看看是否会出现相同的错误。我已经在我的端上尝试过了,它可以工作。

1
如果没有导入 time,尝试运行 time.sleep() 会抛出错误。 - Jessie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接