用functools.partial跟踪

时间:2013-02-13 03:35:26

标签: python python-2.7 trace functools

我正在开发一个使用trace模块来跟踪代码执行情况的项目 当我致电trace.Trace(args).run(stuff)时,stuff必须是代码对象或字符串。

目前,我正在通过调用functools.partial来构建我将调用的函数。这部分完全按照我的需要运作。

但是,当我到达跟踪部分时,我无法使用functools.partial对象执行跟踪。我无法使用myFuncToolsPartialObject.func.func_name(args)因为我无法保证将函数导入本地范围。我可以通过调用导入来解决这个问题,但现在却不愿意(让我们称之为个人偏好)。

有没有办法可以将functools.partial对象转换为代码对象以便正确调用跟踪?

我知道我可以要求myFuncToolsPartialObject.func.func_code,但我不知道如何在所需的参数上调用它

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

这有用吗?

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