Why doesn't python3's print statement flush output when end keyword is specified?

大城市里の小女人 提交于 2019-11-28 05:28:31

问题


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

When I specified end and sleep, I noticed that output wasn't flushed until next print where it was by default flushed.

Why does this happen? I had to manually flush the output.


回答1:


In fact this is the default behavior of the underlying stdio functions.

When the output is to console, the stream will be automatically flushed when a newline is encountered, but not other characters.

If the output is not a console, then even newline won't trigger a flush.

If you want to make sure about flush, you can tell the print() explicitly:

print("Rewinding.......",end = '',flush=True)


来源:https://stackoverflow.com/questions/49081942/why-doesnt-python3s-print-statement-flush-output-when-end-keyword-is-specified

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!