sys.stdoutをログファイルに複製する方法
編集:解決策がないか、誰も知らないような非標準的なことをしているようです-私は質問を修正して次のことも尋ねます:pythonアプリが多くのシステムコール? 私のアプリには2つのモードがあります。インタラクティブモードでは、すべての出力を画面とログファイル(システムコールからの出力を含む)に出力します。デーモンモードでは、すべての出力がログに送られます。デーモンモードは、を使用するとうまく機能しos.dup2()ます。すべてのシステムコールを変更せずに、インタラクティブモードでログへのすべての出力を「ティー」する方法を見つけることができません。 言い換えれば、システムコールの出力を含め、Pythonアプリによって生成されたすべての出力に対して、コマンドライン 'Tee'の機能が必要です。 明確にするために: すべての出力をリダイレクトするには、次のようにします。 # open our log file so = se = open("%s.log" % self.name, 'w', 0) # re-open stdout without buffering sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) # redirect stdout and stderr to the log file opened above os.dup2(so.fileno(), sys.stdout.fileno()) os.dup2(se.fileno(), sys.stderr.fileno()) これの良い点は、残りのコードからの特別な印刷呼び出しを必要としないことです。このコードはいくつかのシェルコマンドも実行するため、それぞれの出力を個別に処理する必要がないのも便利です。 単純に、リダイレクトではなく複製を除いて、同じことをしたいのです。 最初は、単にを逆にするだけdup2でうまくいくと思いました。なぜそうではないのですか?これが私のテストです: import os, …