Search code examples
pythonpython-3.xstdoutflush

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


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.


Solution

  • 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)