如何使用inspect从Python中的被调用者获取调用者的信息?
我需要从被调用者那里得到调用者信息(什么文件/什么行)。 我了解到,我可以使用模块来达到目的,但不完全如此。
如何检查这些信息? 或者有没有其他的方式来获取信息?
import inspect print __file__ c=inspect.currentframe() print c.f_lineno def hello(): print inspect.stack ?? what file called me in what line? hello()
主叫方的帧比当前帧高一帧。 您可以使用inspect.currentframe().f_back
来查找调用者的框架。 然后使用inspect.getframeinfo获取调用者的文件名和行号。
import inspect def hello(): previous_frame = inspect.currentframe().f_back (filename, line_number, function_name, lines, index) = inspect.getframeinfo(previous_frame) return (filename, line_number, function_name, lines, index) print(hello()) # (<frame object at 0x8ba7254>, '/home/unutbu/pybin/test.py', 10, '<module>', ['hello()\n'], 0)
我build议使用inspect.stack
来代替:
import inspect def hello(): frame,filename,line_number,function_name,lines,index = inspect.stack()[1] print(frame,filename,line_number,function_name,lines,index) hello()
我发布了一个简单的堆栈帧地址检查封装器,用单个参数spos
覆盖堆栈帧:
例如pysourceinfo.PySourceInfo.getCallerLinenumber(spos=1)
其中spos=0
是lib函数, spos=1
是调用者, spos=2
是调用者的调用者等。
如果调用者是主文件,只需使用sys.argv [0]