What does print()'s `flush` do?

python, python-3.x

Solution

Normally output to a file or the console is buffered, with text output at least until you print a newline. The flush makes sure that any output that is buffered goes to the destination.

I do use it e.g. when I make a user prompt like `Do you want to continue (Y/n):`, before getting the input.

This can be simulated (on Ubuntu 12.4 using Python 2.7):

from __future__ import print_function

import sys
from time import sleep

fp = sys.stdout
print('Do you want to continue (Y/n): ', end='')
# fp.flush()
sleep(5)

If you run this, you will see that the prompt string does not show up until the sleep ends and the program exits. If you uncomment the line with flush, you will see the prompt and then have to wait 5 seconds for the program to finish

Problem

There is a boolean optional argument to the `print()` function `flush` which defaults to False. The documentation says it is to forcibly flush the stream. I don't understand the concept of flushing. What is flushing here? What is flushing of stream?

Original source