在结束循环之前如何查看发电机的打印输出?

时间:2017-04-07 13:31:41

标签: python python-3.x generator

我试图在使用大量数据列表的生成器中打印调试信息。但是,只有在生成器完成时我才能看到结果。

我正在使用python 3,我的代码如下:

def generator():
    while 1:
        print ('.', end='')
        time.sleep(1)
        yield 1

for a in generator():
    print ('|', end='')

结果:

^C.|.|.|.|.|

等效的PHP7代码按预期工作:

function generator()
{
    while (1) {
        echo '.';
        sleep(1);
        yield 1;
    }
}

foreach (generator() as $item) {
    echo '|';
}

结果:

.|.|.|.|.|^C

如何在生成器周期的每次迭代中实时打印调试信息?

1 个答案:

答案 0 :(得分:4)

<强> TL; DR:

我相信你对这个问题有类似的问题:Print statements not working when serve_forever() is called?(尽管标题不明显......)

尝试冲洗您的照片:

print ('.', end='', flush=True)

print ('|', end='', flush=True)

刷新

  

方法flush()刷新内部缓冲区,如stdio's fflush。这可能是某些文件类对象的无操作。

强制 print()函数将已经缓存到目前为止的任何内容打印到您机器的stdout