global destructor not called?
Neal Becker
ndbecker2 at gmail.com
Fri Jun 15 13:07:35 EDT 2007
Bruno Desthuilliers wrote:
> Neal Becker a écrit :
>> To implement logging, I'm using a class:
>
> If I may ask : any reason not to use the logging module in the stdlib ?
Don't exactly recall, but needed some specific behavior and it was just
easier this way.
>
>> class logger (object):
>> def __init__ (self, name):
>> self.name = name
>> self.f = open (self.name, 'w')
>> def write (self, stuff):
>> self.f.write (stuff)
>> def close (self):
>> self.f.close()
>> def flush (self):
>> self.f.flush()
>> def reopen (self):
>> self.f.flush()
>> self.f.close()
>> os.rename (self.name, self.name + '.old')
>> self.f = open (self.name, 'w')
>> def __del__ (self):
>> try:
>> os.remove (self.name + '.old')
>> except:
>> pass
>>
>> And setting:
>> sys.stderr = logger(...)
>>
>> It seems my cleanup (__del__) is never called,
>
> What makes you think so ?
Cleanup should remove file file '.old', and it wasn't removed. Adding
atexit.register (self.__del__) to the logger constructor DID fix it.
>
>> even though I believe my
>> program exits normally. What's wrong?
>
> Not enough data...
More information about the Python-list
mailing list