1

Pythonスクリプトを実行し、実行されたステートメントごとに、行番号または行自体をコールバック関数に渡す最も簡単な方法は何でしょうか。例えば

実行するコードの一部

for i in range(5):
    z = i**2

とコールバック

def callback(line):
   print line

出力は次のようになります。

for i in range(5):
    z = i**2
for i in range(5):
    z = i**2
for i in range(5):
    z = i**2
...
etc

これを示す別の方法は、デバッガーをステップ実行するスクリプトを実行している場合に次に実行されるコードを知りたいということです。トレースに関するこの質問を見まし たが、それ以上のことを行うことに興味があります。コールバック関数で実行された回数をトレースします。

デバッガーは役に立ちますが、Pythonコードにコールバックする機能を備えた非対話型モードで実行できる場合に限ります

4

3 に答える 3

4

sys.settrace関数を見てください。これにより、コードのすべての行に対して実行されるトレース関数を指定できます。pdbそれは、あなたが望むように見える適切なレベルの抽象化であるように、作成するために特別に実装されたと思います。必要なものを実装することは簡単ではありませんが、開始するのに最適な場所だと思います。

これを使用する本番プログラムについては、coverage.pyを参照してください。

于 2012-08-03T16:12:51.317 に答える
2

それは私を正しい道に導いたのでヌーファルの答えを受け入れるが、これも助けになった

http://www.dalkescientific.com/writings/diary/archive/2005/04/20/tracing_python_code.html

于 2012-08-03T21:55:00.160 に答える
2

エイプリルフールモジュールgotoは、Pythonで実装されたトレースの実用的な例であるため、(coverage.pyのC実装よりも)間違いなく低速ですが、理解するのはかなり簡単です。http://entrian.com/goto/

于 2013-01-31T11:03:58.200 に答える