tail syslog...

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Code: Alles auswählen

def tail( filename, max = 5 ):
    """
    Gibt die letzten >max<-Zeilen einer Datei aus
    """
    print "<h3>%s</h3>" % filename

    f = file( filename, "r" )
    print "<pre>"
    print " ".join( f.readlines()[-max:] )
    print "</pre>"

tail( "/var/log/syslog" )
tail( "/var/log/daemon.log" )
tail( "/var/log/auth.log" )
Jemand eine bessere Lösung parat?
Dumm finde ich, das per f.readlines() erstmal die gesammte Datei eingelesen wird und nicht nur gezielt die letzten Zeilen... Wenn die LOG-Datei richtig lang ist, dauert es ein weilchen und verbraucht RAM...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:Dumm finde ich, das per f.readlines() erstmal die gesammte Datei eingelesen wird und nicht nur gezielt die letzten Zeilen... Wenn die LOG-Datei richtig lang ist, dauert es ein weilchen und verbraucht RAM...
Kennst du schon seek()? Damit kannst du ihm auch angeben, er soll von ende aus lesen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hm! Guter Tip... Ist zwar etwas unschön, beschleunigt die Ausgabe aber schon spürbar!
Ohne seek ca. 0.2-0.3sek mit seek 0.0006-0.0007sek

Code: Alles auswählen

def tail( filename, max = 5 ):
    """
    Gibt die letzten >max<-Zeilen einer Datei aus
    """
    print "<h3>%s</h3>" % filename

    f = file( filename, "r" )
    seekpos = -80*max
    f.seek( seekpos, 2 )
    print "<pre>"
    print " ".join( f.readlines()[-max:] )
    print "</pre>"

tail( "/var/log/syslog" )
tail( "/var/log/daemon.log" )
tail( "/var/log/auth.log" )

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

@Leonidas
Kennst du schon seek()? Damit kannst du ihm auch angeben, er soll von ende aus lesen.
@Jens

Cool, ihr habt mir einen sehr hilfreichen Tip gegeben für die schedlgU.txt, die der Windows-Taskplaner schreibt.
Ich habe immer mal wieder darüber nachgedacht, wie ich die auswerten kann, was konkretes ist mir aber bisher noch nicht eingefallen.

Stöbern lohnt sich :D

mfg, querdenker
Antworten