Hi,
The problem is that when you make this call:
> proc.cmdline()
there are really two steps involved. First you are accessing proc.cmdline,
then you are calling it. You could think of it as this:
func = proc.cmdline
func()
__getattribute__ is able to modify how the first step works, but not the
second. And it is the second step where the OSError gets raised.
You could get around this by returning a wrapper function from
__getattribute__, something like this I think:
def __getattribute__(self, name):
f = object.__getattribute__(self, name)
# here you should really check whether it's a function
def wrapper(self, *args, **kwargs)
print "here 1!"
try:
f(*args, **kwargs)
except OSError, err:
print "here 2!"
if err.errno == errno.ESRCH:
raise NoSuchProcess
if err.errno == errno.EPERM:
raise AccessDenied
return wrapper
That way "func" gets set to the wrapper function, which will handle your
exception as you want.
:) David
--
http://mail.python.org/mailman/listinfo/python-list