2017-04-07 3 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

問題なし –

関連する問題