ich will ein in Python erzeugtes Objekt explizit löschen, da es eine Funktion bereit stellt, die nur zur Lebenszeit des Objektes benötigt werden.
Ich will das stdout in einem Buffer umleiten und mache dies mit eben diesem Objekt. Bei dessen Zerstörung soll die Umleitung wieder aufgehoben werden.
Mit del obj oder obj= None wird der Destruktor nicht direkt ausgeführt. Das Objekt wir lediglich als "frei von Referenzen" markiert. Der GC löscht es erst am Ende...
Das Aufrufen von __delete()__ scheint mir ein wenig der falsche Ansatz zu sein. Es Funktioniert zwar, jedoch bekommt der GC diese "Löschung nicht mit, oder doch???
Ich zeig Euch mal den Code, wie das aussieht:
Code: Alles auswählen
class CCaptOutput(object):
def __init__(self):
print "Ctor"
self.__buffer= []
self.stdoutBackup= sys.stdout
sys.stdout= self
def __del__(self):
print "Dtor"
sys.stdout= self.stdoutBackup
def write(self, text):
self.__buffer.append(text)
def getBuffer(self):
return self.__buffer
def printBuf(self):
for l in self.__buffer:
sys.__stdout__.write(l)
if __name__ == "__main__":
print "Test this file " + __file__
output = CCaptOutput()
print "Hallo"
buf= output.getBuffer()
output.printBuf()
del output
print "buf ", buf
print "End..."
Zur Erklärung:Test this file /home/thc1nl/sdf_Backup/sdfGlobals.py
Ctor
Hallo
Dtor
An der Stell, an der "print "Hallo" steht, sollen später Befehle ausgeführt werden, deren Ausgabe am Bildschirm im Python-Programm verwendet werden sollen...