tail syslog...

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

tail syslog...

Beitragvon jens » Dienstag 29. März 2005, 12:33

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...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: tail syslog...

Beitragvon Leonidas » Dienstag 29. März 2005, 12:51

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 Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 29. März 2005, 13:19

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" )

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

Beitragvon querdenker » Mittwoch 30. März 2005, 12:22

@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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder