2017-04-07 35 views
2

我试图在一个使用大数据列表的生成器中打印调试信息。但是,只有当发电机完成时才能看到结果。如何在结束循环前查看发电机的打印输出?

我使用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 

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

回答

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

+0

谢谢,约翰(9分钟后将标记为答案) – kivagant

+0

没问题的队友:) –