私はPythonでラッパーを書いているコマンドラインツール(実際にはいくつか)を持っています。
このツールは通常、次のように使用されます。
$ path_to_tool -option1 -option2 > file_out
ユーザーは file_out に書き込まれた出力を取得し、実行中のツールのさまざまなステータス メッセージを確認することもできます。
stderr (ステータス メッセージ) をファイルに記録しながら、この動作を再現したいと考えています。
私が持っているのはこれです:
from subprocess import call
call(['path_to_tool','-option1','option2'], stdout = file_out, stderr = log_file)
stderr が画面に書き込まれないことを除けば、これは問題なく動作します。もちろん、log_file の内容を画面に出力するコードを追加することもできますが、その場合、ユーザーはそれが発生している間ではなく、すべてが完了した後に表示されます。
要約すると、望ましい動作は次のとおりです。
- call() または subprocess() を使用する
- stdout をファイルに直接出力する
- ツールがコマンドラインから直接呼び出されたかのように、stderr をファイルに直接出力すると同時に、stderr をリアルタイムで画面に書き込みます。
本当に単純なものが欠けているか、これは思ったよりもはるかに複雑だと感じています...助けてくれてありがとう!
編集: これは Linux でのみ機能する必要があります。