[Python-de] Status von geöffneten Files

"Martin v. Löwis" martin at v.loewis.de
Die Jan 31 19:56:47 CET 2006


Steffen Oschatz wrote:
> Die einzige Möglichkeit die ich bis jetzt gefunden habe, heraus zu 
> bekommen ob das File noch aktuell ist, ist ein write() - erst dann wird 
> eine exception geworfen.
> Nun moechte ich aber ein Logfile nicht schreiben. 
> 
> Gibts da einen besseren Ansatz ?

Wie Stefan Behnel schon bemerkt hat: Mit tell() die aktuelle Position
geben lassen, mit stat() überprüfen, ob sich die Datei geändert hat,
dann wieder neu suchen, mit seek() an die Stelle springen und von
da weiter lesen.

Vorsicht bei Umbenennungen: Wenn das logfile rotiert, willst Du
vermutlich noch den Rest zwischen Deinem letzten Lesen und der
Umbenennung verarbeiten; außerdem willst Du die neue Datei von
vorn verarbeiten.

Dazu musst Du die Umbenennung erkennen. Am einfachsten ist das
auch mit stat: Wenn sich die Inode-Nummer ändert, wurde die Datei
umbenannt. Außerdem sollte die Datei nicht kleiner werden, und
(wenn Du ganz sicher gehen willst) sollten die letzten 100 Bytes
vor der Stelle, an der du abgesetzt hast, auch noch die gleichen
sein.

Ciao,
Martin