python`print`在循环中不起作用

python `print` does not work in loop

我有多个循环在一起,睡眠在最内部的循环。例如:

1
2
3
4
5
6
7
8
9
10
11
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 ''

如果您运行代码,您可能期望在它之后获得iD休眠1秒,另一个D,然后再次休眠直到结束。

但结果是不同的,它等待10秒,然后打印0 D D D D D D . . . .的整行,然后再次等待打印下一行。

我在打印结束时发现逗号导致了这个问题。我怎么解决?


由于逗号的存在,输出缓冲到
为止。

每次打印或使用sys.stdout.write和flush buffer后,应冲洗stdout

定义打印方法:

1
2
3
4
5
import sys

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

在行尾打印一个


使用print ,的问题是只有当结果ID准备好打印时才进行缓冲和打印。

您可以使用来自__future__print_function来解决它(这也将符合python 3的要求):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from __future__ import print_function
from time import sleep
import sys

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