在Python中,为什么没有换行就不能打印?

时间:2011-05-06 22:11:13

标签: python posix

import time
import sys
sys.stdout.write("1")
time.sleep(5)
print("2")

将在5秒后打印“12”

import time
import sys
sys.stdout.write("1\n")
time.sleep(5)
print("2")

将立即打印“1 \ n”,然后在5秒后打印“2”

为什么会这样?

6 个答案:

答案 0 :(得分:22)

如果添加“\和”,则会自动刷新流,并且最后没有新行。 您可以使用以下内容刷新输出:

sys.stdout.flush()

答案 1 :(得分:7)

因为stdout是缓冲的。您可以通过sys.stdout.flush()电话尽快强制输出。

答案 2 :(得分:4)

这是因为Python中的输出默认是缓冲的 - 通常在缓冲区已满或导致缓冲区被刷新之前你不会得到输出。在这种情况下,\n被感知并导致自动冲洗。

有关解决问题的方法,请参阅此问题:How to flush output of Python print?

答案 3 :(得分:4)

sys模块中的sys.stdout.write命令有目的地打印出没有\ n字符的语句。这是对stdout流的正常调用的工作方式,例如在C ++或C中,必须手动添加\ n字符。

然而,Python提供的print命令会自动为字符串添加\ n字符,从而简化代码并使其更易于阅读。

第一个结果发生现象的原因是因为系统正在等待刷新打印,这是由\ n字符提供的。您可以使用此命令sys.stdout.flush()来避免这种情况,该命令将刷新强制它打印的标准输出流。

答案 4 :(得分:2)

缓冲。它不是真正的Python,而是您的操作系统/终端。任何程序的输出都被发送到缓冲区,即内存的保留区域。收集整行后,将其发送到屏幕。通常有一个钩子,一个名为flush()的方法,用于强制输出部分线。

答案 5 :(得分:1)

考虑到当您在计算机中键入命令时,在您按ENTER键之前它不知道您已完成

同样,换行告诉Python你已完成该行。