2012-04-20 4 views
4

私は次のコードを実行しています(それをbatch.py​​呼び出す)Python:なぜprintステートメントとsubprocess.call()の出力が同期していないのですか?

for config in keystoneConfig: 
    cmdlist = generate_cmd_list(config) 
    print ' '.join(cmdlist) 
    subprocess.call(cmdlist) 

そして、別のファイルにbatch.py​​の出力をリダイレクトします。すなわち

./batch.py​​> output.txtと

しかし、私はsubprocess.call()からのすべての出力がprint文の前に行くことを実現します。なぜ出力が同期していないのですか?

答えて

9

Pythonは自身の出力をブロックしてブロックします。subprocess.call()の前にフラッシュしません。その出力はコンソールではなくファイルにリダイレクトされているためです。ラインバッファリングを強制するか、バッファリングを無効にするか、サブプロセスコールの前に手動でフラッシュする必要があります。

+0

print文を "フラッシュ"するにはどうすればよいですか? – CodeNoob

+5

'sys.stdout.flush()' – Fenikso

関連する問題