Python で stdout を任意のファイルにリダイレクトするにはどうすればよいですか?
長時間実行される Python スクリプト (Web アプリケーションなど) が ssh セッション内から開始され、バックグラウンドで実行され、ssh セッションが閉じられると、アプリケーションは IOError を発生させ、stdout に書き込もうとした瞬間に失敗します。IOError による失敗を防ぐには、アプリケーションとモジュールを stdout ではなくファイルに出力する方法を見つける必要がありました。現在、nohup を使用して出力をファイルにリダイレクトしており、これで問題は解決していますが、好奇心から、nohup を使用せずにこれを行う方法があるかどうか疑問に思っていました。
すでに試してみましたsys.stdout = open('somefile', 'w')
が、これによって一部の外部モジュールがターミナルに出力されなくなるのを防ぐことはできないようです (または、行sys.stdout = ...
がまったく実行されなかった可能性があります)。テストしたより単純なスクリプトでは機能するはずですが、Web アプリケーションでテストする時間はまだありませんでした。
ベストアンサー1
Python スクリプト内でリダイレクトを実行する場合は、sys.stdout
ファイル オブジェクトに設定するとうまくいきます。
# for python3
import sys
with open('file', 'w') as sys.stdout:
print('test')
より一般的な方法は、実行時にシェル リダイレクトを使用することです (Windows と Linux で同じ)。
$ python3 foo.py > file