为啥打印功能没有在正确的时间运行? [复制]

Posted

技术标签:

【中文标题】为啥打印功能没有在正确的时间运行? [复制]【英文标题】:Why is the print function not running at the right time? [duplicate]为什么打印功能没有在正确的时间运行? [复制] 【发布时间】:2019-08-05 20:23:20 【问题描述】:

这是我的代码:

import time as t

print('hello', end=' ')
t.sleep(1)
print('hello', end=' ')
t.sleep(1)
print('hello', end=' ')
t.sleep(1)

我的问题是所有的打印命令都是在睡眠命令之后执行的,这不是我想要的输出。

【问题讨论】:

您要打印到哪里?我无法重现,但stdout 有一个缓冲区,并且可能没有被刷新。 我的意思是,你有没有将标准输出指向某个地方?这应该可以很好地打印到控制台。 你的意思是需要三秒钟然后打印三遍hello?因为它打印了 hello 三次,中间有 1 秒钟的休息时间 Python 3 中print() 有一个可选的flush 参数。如果添加flush=Trueprint 应该会立即打印。 密切相关:How to flush output of print function? 【参考方案1】:

这是因为输出缓冲。在打印换行符之前不会刷新缓冲区。由于您使用了end=' ',因此每个单词后面都没有换行符,因此在脚本结束之前不会刷新缓冲区。

您可以使用flush=True 选项强制它立即刷新。

import time as t
import sys

print('hello', end=' ', flush=True)
t.sleep(1)
print('hello', end=' ', flush=True)
t.sleep(1)
print('hello', end=' ', flush=True)
t.sleep(1)

【讨论】:

这不会给出想要的行为,我不认为。我可以在单行上按顺序构建输出很好 @ChristianDean 刚刚发现自己,要编辑了 抓住@Barmar。 print('hello\n', end=' ') 为什么这个工作正确?新行在印刷品中有什么作用?? 因为您正在向输出缓冲区@mohamadmahdireisi 写入换行符,导致它被刷新。

以上是关于为啥打印功能没有在正确的时间运行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

If x == y: print z - 为啥我的代码不打印? [复制]

为啥在输出中打印“无”? [复制]

为啥在烧瓶中没有调用函数时会有一些打印? [复制]

为啥在我的程序中没有打印更新的正确值?

为啥此命令无法打印 Python 命令的正确退出代码?

为啥我的代码的最后一行没有打印?另外,我将数字四舍五入到小数点后两位的最简单方法是啥? [复制]