pythoninspect

How to use inspect to get the caller's info from callee in Python?


I need to get the caller info (what file/what line) from the callee. I learned that I can use the inspect module for that purpose, but not exactly how.

How do you get that info with inspection? Or is there any other way to get the info?

import inspect

print __file__
c=inspect.currentframe()
print c.f_lineno

def hello():
    print inspect.stack
    ?? what file called me in what line?

hello()

Solution

  • 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 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())
    
    # ('/home/unutbu/pybin/test.py', 10, '<module>', ['hello()\n'], 0)