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='')
.
Modify print() method to print on the same line The print method takes an extra parameter end=” “ to keep the pointer on the same line. The end parameter can take certain values such as a space or some sign in the double quotes to separate the elements printed in the same line.
Definition and Usage. The print() function prints the specified message to the screen, or other standard output device. The message can be a string, or any other object, the object will be converted into a string before written to the screen.
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.
This is just python buffering stdout. This answer has some more info.
You can flush it like this:
import sys
from __future__ import print_function
import time
x = 0
while x < 5:
print(x, end='')
x += 1
sys.stdout.flush()
time.sleep(1)
Alternatively start python python -u
and it won't be buffered.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With