Python等待打印不完整的行?

时间:2014-11-28 22:36:28

标签: python-3.x

获取此Python 3代码段:

print("walrus")
timeConsumingTask()
print("giraffe")

运行时,会打印walrus,并在延迟后giraffe(每个都在各自的行上)。

现在采用这个类似的片段:

print("walrus", end=' ')
timeConsumingTask()
print("giraffe", end=' ')

在延迟之后,它会同时打印walrus giraffe - 虽然我希望第一个单词先打印,然后是第二个单词,然后延迟打印。

为什么会这样?无论如何解决这个问题(除了不使用end)?

我使用的是Python 3.4.2。

2 个答案:

答案 0 :(得分:2)

这是由于Python(通常是你的系统的C stdio库)缓冲输出。总的来说,这是可取的,因为它可以带来更好的性能,但正如您已经注意到的那样,有时它并不是您想要的。

根据您想要实现的目标,有很多方法可以解决这个问题:

  • 打印到stderr而不是stdout(默认情况下,stderr未缓存):

    print("walrus", end=" ", file=sys.stderr)
    
  • 打印后冲洗:

    print("walrus", end=" ")
    sys.stdout.flush()
    

    或更紧凑(对于Python> 3.3),

    print("walrus", end=" ", flush=True)
    
  • this question的答案中也有一些选项,但并非所有选项都适用于Python 3.

答案 1 :(得分:1)

标准输出默认为行缓冲;缓冲区中保留不完整的行,直到写入换行符(或缓冲区填满)。您可以通过使用

刷新缓冲区来强制写入文本
print("walrus", end=' ')
sys.stdout.flush()
timeConsumingTask()
print("giraffe", end=' ')