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

问题描述:

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

将在5秒钟在Python中,为什么不打印没有换行符?

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

后打印 “12” 5秒

这是为什么之后将打印 “1 \ n” 个向右走,然后 “2”?

如果添加“\ n”,那么流将自动刷新,并且最后不会有新行。 您可以使用以下命令刷新输出:

sys.stdout.flush()

+0

我提高了除你的答案之外的所有答案,因为它不那么具有说明性 – eyquem 2011-05-07 15:00:05

因为stdout已被缓冲。您可能可以通过拨打sys.stdout.flush()来尽早强制输出。

缓冲。这不是真的Python,而是你的操作系统/终端。来自任何程序的输出被发送到缓冲区,该区域是存储器的保持区域。当整行被收集时,它被发送到屏幕上。通常会有一个钩子,一种名为类似flush()的方法来强制输出部分线条。

想想看,当你输入一个命令到计算机,它不知道你完成直到你按下ENTER

同样,换行符告诉Python中,你已经完成了该行。

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

看到这个问题了解决该问题的方法:How to flush output of Python print?

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

但是,Python提供的打印命令会自动为字符串添加一个\ n字符,因此简化了代码并使其更易于阅读。

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