获取此Python 3代码段:
print("walrus")
timeConsumingTask()
print("giraffe")
运行时,会打印walrus
,并在延迟后giraffe
(每个都在各自的行上)。
现在采用这个类似的片段:
print("walrus", end=' ')
timeConsumingTask()
print("giraffe", end=' ')
在延迟之后,它会同时打印walrus giraffe
- 虽然我希望第一个单词先打印,然后是第二个单词,然后延迟打印。
为什么会这样?无论如何解决这个问题(除了不使用end
)?
我使用的是Python 3.4.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=' ')