Das deutsche Python-Forum

Diskussionen rund um die Programmiersprache Python
Aktuelle Zeit: Fr Sep 03, 2010 02:07

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: tail syslog...
BeitragVerfasst: Di Mär 29, 2005 13:33 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
Code:
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...

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: tail syslog...
BeitragVerfasst: Di Mär 29, 2005 13:51 
Administrator
Benutzeravatar

Registriert: Fr Jun 20, 2003 17:30
Beiträge: 13867
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!


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 29, 2005 14:19 
Moderator

Registriert: Di Aug 10, 2004 10:40
Beiträge: 6153
Wohnort: duisburg
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:
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" )

_________________

- Python CMS: http://www.pylucid.org
- Mein ohloh Profil


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 30, 2005 13:22 
User

Registriert: Mo Jul 28, 2003 17:19
Beiträge: 392
Wohnort: /dev/reality
@Leonidas
Zitat:
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


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de