Sync32 hat geschrieben:ok der code funktioniert, versteh ihn aber nicht ganz
wann setzt er write ein? und woher bekommt er data?
Der Code ist in einigen Teilen auch sehr unschön
`file` sollte man nicht überschreiben, da das ein Built-in Name ist.
Grundsätzlich ist das eine Art Monkey-Patching. fsck baut ein Objekt, welches eine `write`-Methode besitzt. Intern ruft Python augenscheinlich beim `print`-Statement die `write`-Methode eines Objektes auf, welches sich an den Namen `sys.stdout` gebunden ist. Dieses Objekt gibt damit dann den String an die Shell weiter. fsck schaltet sich also quasi dazwischen, indem er ganz Duck Typing konform ein Objekt dazwischen schaltet. Dieses Objekt ruft nun aber eben nicht nur die `write`-Methode von `sys.stdout` auf, sondern alle von einer Liste von `file`-like Objekten. Er bindet dieses neue Objekt einfach an `sys.stdout` und übergibt ihm neben dem alten Objekt hinter `sys.stdout` zusätzlich ein (Log-)Datei-Objekt. Intern ruft Python nun also das neue Objekt hinter `sys.stdout` auf und landet damit in der `write`-Methode von `MyOut`.
Generell sollte man Dateien aber immer schließen - das passiert hier nicht
Zudem ist der ganze Ansatz immer noch in Frage zu stellen, wo es doch spezielle Logging-Module gibt.