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

Question:

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

How to get those info with inspect? 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()
Asked By: prosseek

||

Answers:

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)
Answered By: unutbu

I would suggest to use inspect.stack instead:

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()
Answered By: Dmitry K.

If the caller is the main file, simply use sys.argv[0]

Answered By: Jacob Cohen

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.

Answered By: acue
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.