关于python:使用time.sleep()在同一行上打印

Printing on the same line with time.sleep()

我试图用中间的计时器在同一行上打印两个字符串。代码如下:

1
2
3
4
5
import time

print"hello",
time.sleep(2)
print"world"

但程序似乎等待两秒钟,然后打印两个字符串。


问题是,默认情况下,控制台输出是缓冲的。由于python 3.3 print()支持关键字参数flush(参见文档):

1
print('hello', flush=True)

如果使用的是以前版本的python,则可以强制执行如下刷新:

1
2
import sys
sys.stdout.flush()


在python 2.7中,您可以使用将来包中的print_函数

1
2
3
4
5
6
from __future__ import print_function
from time import sleep

print("hello,", end="")
sleep(2)
print("world!")

但正如您所说,这将等待2秒钟,然后打印两个字符串。根据gui rava的回答,您可以清除stdout,下面是一个示例,它可以让您找到正确的方向:

1
2
3
4
5
6
7
8
9
10
import time
import sys

def _print(string):
    sys.stdout.write(string)
    sys.stdout.flush()

_print('hello ')
time.sleep(2)
_print('world')