2013-02-13 2 views
2

trace 모듈을 사용하여 코드 실행을 추적하는 프로젝트를 진행 중입니다.
trace.Trace(args).run(stuff)으로 전화하면 stuff은 코드 개체 또는 문자열이어야합니다.trace with functools.partial

지금은 functools.partial으로 전화를 걸 예정입니다. 이 부분은 내가 필요로하는 것과 똑같이 작동합니다.

그러나 추적 부분에 도달하면 functools.partial 개체로 추적을 실행할 수 없습니다. 이 기능을 로컬 범위로 가져올 수 있다고 보장 할 수 없기 때문에 myFuncToolsPartialObject.func.func_name(args)을 사용할 수 없습니다. 가져 오기를 요청하면서이 문제를 해결할 수는 있지만, 지금은 그렇지 않습니다.

정확한 추적을 위해 functools.partial 개체를 코드 개체로 변환 할 수있는 방법이 있습니까?

은 내가 myFuncToolsPartialObject.func.func_code을 요청할 수 있습니다 알지만, 난 필요한 인수

답변

1

trace에는이 사용 사례가 내장되어 있습니다. trace.Trace().runfunc(funcObject, *args) 정확히 이것을 수행합니다. the docs에서

:

runfunc(func, *args, **kwds) 
Call func with the given arguments under control of the Trace object with the current tracing parameters. 
0

이 일을 하는가에 전화하는 방법을 알고하지 않을까요?

trace.Trace().run((lambda :partial_stuff(args)).func_code) 
+0

나는'형식 오류 얻을 : 무료 variables'를 포함 할 수 없습니다 간부 인에 전달 된 코드 개체를. 하지만 그렇지 않으면, 나는이 해결책을 생각하고 싶다. – inspectorG4dget