Kent Johnson wrote: > Bill Campbell wrote: > >>Is there a way in python for a method to determine its parent? >> >>In particular, I'm working with SimpleXMLRPCServer, and would >>like to be able to find the client_address in the routine that >>has been dispatched. I know that client_address is an attribute >>of the handler class instance, but don't know how to get to that. > > > You can inspect the stack frame to find this out. Search the online cookbook > for _getframe - I don't see one recipe that does exactly what you want but > the pieces are there. > http://aspn.activestate.com/ASPN/Cookbook/Python
OK here is a simple module that shows callers on the stack. import sys def showFrame(f): print 'Name =', f.f_code.co_name for k, v in f.f_locals.iteritems(): print ' ', k, '=', v print def whereAmI(): i=1 while True: try: f = sys._getframe(i) showFrame(f) i += 1 except ValueError: break if __name__ == '__main__': def foo(a): bar = 'baz' zap = 3 whereAmI() def bar(): foo(3) bar() When I run this it prints Name = foo a = 3 bar = baz zap = 3 Name = bar Name = ? bar = <function bar at 0x008E9070> showFrame = <function showFrame at 0x008E0A30> __builtins__ = <module '__builtin__' (built-in)> __file__ = F:\Tutor\ShowStack.py sys = <module 'sys' (built-in)> whereAmI = <function whereAmI at 0x008E08B0> __name__ = __main__ foo = <function foo at 0x008E9030> __doc__ = Show stuff from the stack frame HOWEVER, I don't think this is a good solution to your problem - it's quite a fragile hack. Better would be to find a way to pass the information you need to your function. For example, from a quick look at the code for SimpleXMLRPCServer, it looks like you could subclass SimpleXMLRPCServer and make your own _dispatch() method that adds client_address to the parameter list, then all your functions would be passed the client_address. Or even specialize it so that just one special function gets this treatment. Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor