问题
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