Pythonスクリプトがあります。ターミナルに何かを出力している間にその結果を保存したいのですが、試してみました
python program.py 2>&1 | tee output.txt
しかし、プログラムが終了した後にのみ、すべての内容が画面に印刷されるようです。実行中は出力がありません。プログラムの実行中に進行状況を知りたいので、本当に困っています。画面とファイルに同時に出力する方法はありますか?
2019年11月13日更新
@egmont さん、助けてくれてありがとう。同じ問題に遭遇している人は、次のコマンドを試してみてください。画面に出力され、同時にファイルに書き込まれます。
stdbuf -oL python program.py 2>&1 | tee ouput.txt
答え1
私も同じ問題に遭遇していました( 、バックグラウンド化( )、リダイレクトstdout
など、操作を伴う「あらゆる」もの)。興味深いことに、 では問題は解決しませんでした。しかし、Python 2と3(どちらのサブバージョンかはわかりません、すみません)はどちらも、 とをバッファリングしないオプションをサポートしていることがわかりました。nohup
&
stdbuf -oL
-u
stdout
stderr
python2.7.1 の man ページ。
私は(そのマニュアルページによると)Python 2.7でもstdin
バッファリングされていないことに気付きました。一方、Python 3(私の場合は3.10)のマニュアルページには、特に次のように書かれています。"This option has no effect on the stdin stream."
したがって、OP の元のコマンドは次のようになります。
python -u program.py 2>&1 | tee output.txt
すると、PHP / awk などで期待される動作が得られます。
OP が「画面とファイルに同時に出力する方法はありますか?」と尋ねたように、この「解決策」はtee
OP がすでに推測したものに依存しており、python -u
より馴染みのある動作を提供する必要があります。