How to use inspect to get the caller's info from callee in Python?
The caller's frame is one frame higher than the current frame. You can use inspect.currentframe().f_back
to find the caller's frame.Then use inspect.getframeinfo to get the caller's filename and line number.
import inspectdef 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())# ('/home/unutbu/pybin/test.py', 10, '<module>', ['hello()\n'], 0)
I published a wrapper for inspect with simple stackframe addressing covering the stack frame by a single parameter spos
:
E.g. pysourceinfo.PySourceInfo.getCallerLinenumber(spos=1)
where spos=0
is the lib-function, spos=1
is the caller, spos=2
the caller-of-the-caller, etc.