Why do python print statements that contain 'end=' arguments behave differently in while-loops?
python, while-loop
Solution
Because the output stream is line-buffered - since it's not explicitly being flushed in between print statements, it waits until it sees a newline to flush the output.
You can force flushing via `sys.stdout.flush()`.
Alternatively if you run Python with the `-u` flag, it will disable line buffering.
Problem
I'm running python version 2.7.3 on MacOSX. Consider this block of code: ``` from __future__ import print_function import time x = 0 while x < 5: print(x) x += 1 time.sleep(1) ``` If I run this script, I observe the output I expect: The numbers `0` through `4` with a `\n` character appended to each number. Futhermore, each number displays after a one second pause. ``` 0 1 2 3 4 ``` Now consider this code block: ``` from __future__ import print_function import time x = 0 while x < 5: print(x, end='') x += 1 time.sleep(1) ``` The output is what I expect, `01234` without the `\n`'s, but the timing is unexpected. Rather than displaying each digit after a one-second pause, the process waits four seconds, then displays all five numbers. Why does `print('string')` behave differently from `print('string', end='')` in while-loops? Is there any way to display the characters without newlines, one second at a time? I tried `sys.stdout.write(str(x))`, but it behaves the same way as `print(end='')`.