5

次のコードを実行しています(batch.py​​と呼びます)

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

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

./batch.py​​> output.txt

しかし、私はからのすべての出力がステートメントsubprocess.call()の前に行くことを理解しています。print出力が同期していないのはなぜですか?

4

2 に答える 2

10

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

于 2012-04-20T21:21:50.323 に答える
3

sys.stdout.flush()印刷後、サブプロセス呼び出しを行う前にフラッシュします。

于 2021-04-01T19:43:07.783 に答える