指定end关键字后,为什么python3的print语句不刷新输出?

Tar*_*nti 3 python stdout flush python-3.x

from sys import argv, stdout as cout
from time import sleep as sl
print("Rewinding.......",end = '') # If end is given output isn't flushed. But why?
cout.flush()
for i in range(0,20):
    sl(0.2)
    print(".",end='',flush = True) #No output is printed if flush wasn't specified as true.

print("Done") #Output is by default flushed here
Run Code Online (Sandbox Code Playgroud)

当我指定结束并进入睡眠状态时,我注意到直到下一次打印时才刷新输出,直到默认情况下才刷新它。

为什么会这样?我不得不手动刷新输出。

lll*_*lll 6

实际上,这是基础stdio功能的默认行为。

当输出到控制台时,遇到换行符时将自动刷新流,但不会遇到其他字符。

如果输出不是控制台,那么即使换行也不会触发刷新。

如果要确保刷新,可以print()明确告诉:

print("Rewinding.......",end = '',flush=True)
Run Code Online (Sandbox Code Playgroud)