コンソールリダイレクトを使用して画面外でスクリプトを実行すると、ログファイルは出力されません(T)

コンソールリダイレクトを使用して画面外でスクリプトを実行すると、ログファイルは出力されません(T)

コンソールに一般的なロギングを作成するPythonスクリプトがあります。私は一般的ですpython -u jbot.py | tee -a jbot.log。ただし、画面外で実行しようとすると、次のようになります。

screen python -u jbot.py | tee -a jbot.log

私のファイルはログ出力を受け取りません。接続を切断するとscreenセッションのコンソール出力が完全に抑制されますか、またはスクリプトのstdoutとstderrからログファイルへの入力を引き続き取得する方法はありますか?

私はロギングライブラリを使用してこの問題を解決できることを知っていますが(とにかくフィルタリングを行うので)、今はロギングモジュールを自分のコードに適切に統合できるまでコンソール出力をキャプチャすることができます(可能であれば)。 。

ベストアンサー1

次のようにする必要があります。

screen sh -c 'python -u jbot.py | tee -a jbot.log'

デフォルトでは、画面出力(直接Pythonスクリプトではない)をログにパイプする前に。 Screenは実行されるコマンドを引数として受け入れ、シェル自体を使用しません。したがって、シェルを実行するように明示的に指示する必要があります。

別のオプションは、画面に組み込まれた出力ロギングを使用することです。これらの-Lオプションを確認してください(画面のUIを介して画面内でも使用できます)。

おすすめ記事