Python `print` does not work in loop

pythonpython-2.7

I have multi loops in together and a sleep in the most inner loop. for example:

from time import sleep

for i in range(10):
    print i,
    for j in range(-5,5):
        if j > 0:
            print '.',
        else:
            print 'D',
        sleep(1)
    print ''

if you run the code, you may expected to get i value after it D sleep 1 second and another D and again sleep until to the end.

but the result is difference, it waits 10 seconds and prints the whole line of 0 D D D D D D . . . . and waiting again to printing next line.

I found the comma at the end of printing causes this problem. How can I solve it?

Best Solution

Because of existence of comma, the output buffers until a \n.

You should flush the stdout after every print or use sys.stdout.write and flush buffer.

Define your print method:

import sys

def my_print(text):
    sys.stdout.write(str(text))
    sys.stdout.flush()

and at the end of line print a \n