Get __name__ of calling function's module in Python

introspection, python, stack-trace

Solution

Check out the inspect module:

`inspect.stack()` will return the stack information.

Inside a function, `inspect.stack()[1]` will return your caller's stack. From there, you can get more information about the caller's function name, module, etc.

See the docs for details:

http://docs.python.org/library/inspect.html

Also, Doug Hellmann has a nice writeup of the inspect module in his PyMOTW series:

http://pymotw.com/2/inspect/index.html#module-inspect

EDIT: Here's some code which does what you want, I think:

import inspect 

def info(msg):
    frm = inspect.stack()[1]
    mod = inspect.getmodule(frm[0])
    print '[%s] %s' % (mod.__name__, msg)

Problem

Suppose `myapp/foo.py` contains: ``` def info(msg): caller_name = ???? print '[%s] %s' % (caller_name, msg) ``` And `myapp/bar.py` contains: ``` import foo foo.info('Hello') # => [myapp.bar] Hello ``` I want `caller_name` to be set to the `__name__` attribute of the calling functions' module (which is 'myapp.foo') in this case. How can this be done?

Original source