3

Pythonインタープリターを終了させて​​ファイルに保存し、画面に出力するすべてのエラーをログに記録する方法を見つけたいと思います。私がこれをやりたい理由は、コードを書いているときに犯すエラーの種類に関する統計を保持し、将来よく犯す間違いを回避する方法を見つけることを目指しているからです.

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

import os  
import time

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

そして、p.communicate() で subprocess.Popen() を使用しています。ラッパーは 100 秒待機してから、すべての出力を出力します。ラッパーをできるだけ見えないようにしたいのですが、理想的には、この場合、10 秒ごとに "testing" を出力します。

誰かがこれを行うための良い方法を教えてくれたら、とても感謝しています。

ありがとう!

4

1 に答える 1

6

sys.excepthook独自の関数に簡単に置き換えることができると思います。これについては、Python ドキュメントを参照してください。

基本的に、Python インタープリターを強制的に終了させるまで例外が浸透したときに何が起こるかをカスタマイズできます。次のように使用します。

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

取得したトレースバックをフォーマットするために、おそらくtraceback モジュールも参照する必要があります。

于 2011-02-09T05:46:04.233 に答える