为了更好地理解我尝试实现跟踪元类的程序,当一个类继承它时,它的所有方法调用都会被跟踪到一个文件。我不能简单地使用像Trace.py
这样的模块,因为我无法在执行环境中访问控制台。我最近了解了sys.settrace()
,一个钩子,每当python执行一行就被调用,虽然它几乎解决了我的问题,但我无法获得跟踪的相关行信息,因为我没有任何知道将执行哪个文件的方法。我怀疑我需要一个在类中的任何方法被调用之前调用的钩子,它传入方法名称,然后在跟踪元类中实现该钩子。
在所有python钩子的某处都有引用吗?
提前致谢
答案 0 :(得分:3)
我不确定我是否正确理解了您的问题,但您可以从框架的f_code
成员获取有关文件/行的信息:
def trace(frame, event, arg_frame):
print(frame.f_code.co_filename, frame.f_code.co_firstlineno)
sys.settrace(trace)
有关框架和代码对象的更多信息:https://docs.python.org/3/library/inspect.html