2011-02-09 7 views
3

私は、ファイルに保存されるだけでなく、スクリーンに印刷されるように、Pythonインタプリタを強制終了するすべてのエラーをログに記録する方法を見つけたいと思います。私がこれをやりたいのは、私がコードを書いている間に私が作ったエラーの種類についての統計情報を、私が将来共通する間違いを避ける方法を見つけ出すための目安としたいからです。Pythonエラーログ

私はこれを、サブプロセスモジュールを使用してPythonインタプリタのラッパーを作成することによって試みました。基本的には、Pythonインタプリタを実行し、出力をキャプチャし、解析してファイルに保存し、出力を出力し、matplotlibを使用していくつかの要約を作成します。しかし、私はラッパースクリプトからリアルタイムで出力を得ることに問題があります。私が実行しているスクリプトがある場合たとえば、:

import os 
import time 

for x in range(10): 
    print "testing" 
    time.sleep(10) 

と私はsubprocess.Popen()p.communicateと()を使用しています、ラッパーは100秒待ってから出力の全てを印刷します。私はラッパーをできるだけ目に見えないものにしたいと思っています。理想的にはこの場合、10秒に1度「テスト」を印刷します。

誰かが私にこのようなやり方を教えてもらえると大変感謝しています。

ありがとうございます!

答えて

6

sys.excepthookをあなたの機能で置き換えることができます。 Python documentationでそれについて読むことができます。

基本的には、例外がPythonインタプリタを強制終了するまでに何が起こったのかをカスタマイズすることができます。あなたはこのようにそれを使用する:あなたはおそらくも、あなたが取得するトレースバックをフォーマットするため、the traceback moduleを見てみたいと思う

import sys 

def my_excepthook(type, value, tb): 
    # you can log the exception to a file here 
    print 'In My Exception Handler' 

    # the following line does the default (prints it to err) 
    sys.__excepthook__(type, value, tb) 

sys.excepthook = my_excepthook