2

traceモジュールを使用してコードの実行をトレースするプロジェクトに取り組んでいます。
を呼び出すときはtrace.Trace(args).run(stuff)stuffコードオブジェクトまたは文字列のいずれかである必要があります。

今のところ、を呼び出して呼び出す関数を作成していますfunctools.partial。この部分は、私が必要としているとおりに機能します。

ただし、トレース部分に到達すると、functools.partialオブジェクトを使用してトレースを実行できません。myFuncToolsPartialObject.func.func_name(args)関数がローカルスコープにインポートされることを保証できないため、使用できません。インポートを呼び出すことでこれを回避できますが、現時点では回避したいと思います(個人的な好みと呼びましょう)。

functools.partialトレースを適切に呼び出すために、オブジェクトをコードオブジェクトに変換する方法はありますか?

私は求めることができることを知っていmyFuncToolsPartialObject.func.func_codeますが、必要な引数でそれを呼び出す方法がわかりません

4

2 に答える 2

1

traceこのユースケースだけのサポートが組み込まれていることがわかりました。trace.Trace().runfunc(funcObject, *args)まさにこれを行います。

ドキュメントから:

runfunc(func, *args, **kwds)
Call func with the given arguments under control of the Trace object with the current tracing parameters.
于 2013-02-13T04:16:37.940 に答える
0

これは機能しますか?

trace.Trace().run((lambda :partial_stuff(args)).func_code)
于 2013-02-13T03:50:49.940 に答える