在python中获取函数调用者的信息 [英] Get function callers' information in python

查看:381
本文介绍了在python中获取函数调用者的信息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想获取有关python中特定函数的调用者的信息。例如:

I want to get information about the callers of a specific function in python. For example:

class SomeClass():
    def __init__(self, x):
        self.x = x
    def caller(self):
        return special_func(self.x)

def special_func(x):
    print "My caller is the 'caller' function in an 'SomeClass' class."

是否可以使用python?

Is it possible with python?

推荐答案

是的, sys._getframe() 函数让您从当前执行堆栈中检索框架,然后可以使用 检查模块;您将在 f_locals 属性中查找特定的本地人,以及 f_code 信息:

Yes, the sys._getframe() function let's you retrieve frames from the current execution stack, which you can then inspect with the methods and documentation found in the inspect module; you'll be looking for specific locals in the f_locals attribute, as well as for the f_code information:

import sys
def special_func(x):
    callingframe = sys._getframe(1)
    print 'My caller is the %r function in a %r class' % (
        callingframe.f_code.co_name, 
        callingframe.f_locals['self'].__class__.__name__)

请注意,您需要格外小心以检测在每个帧中发现的信息。

Note that you'll need to take some care to detect what kind of information you find in each frame.

sys._getframe()返回一个框架对象,您可以按照 f_back 参考。或者,您可以使用 inspect.stack() 函数生成带有附加信息的框架列表。

sys._getframe() returns a frame object, you can chain through the whole stack by following the f_back reference on each. Or you can use the inspect.stack() function to produce a lists of frames with additional information.

这篇关于在python中获取函数调用者的信息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆