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?
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)