[pyar] Trabajando con log

Cesar Verdes cesarverdes en gmail.com
Mar Nov 27 20:02:23 ART 2012


Alberto,

No soy especialista en Python, pero tal vez mi idea te sirva.

Si está usando los métodos descriptos en el apartado 7.2. Reading and
Writing Files<http://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files>del
tutorial de Python, podrías usar los métodos
file.tell() para leer la posición del último caracter procesado en un ciclo
de cron y  file.seek(offset) para comenzar desde ahí en adelante en la
próxima ejecución del cron.

Te paso un código de ejemplo... tal vez sea poco pythonesco y con dejo a C,
pero a mi me funcionó.

=================  START CODE  =================
def write_last_position(pos):
    f = open('/tmp/pos', 'w')
    f.write(str(pos))
    f.close

def read_last_position():
    f = open('/tmp/pos', 'r')
    pos = long(f.read())
    f.close
    return pos

def cron():
    f = open('/tmp/file.log', 'r')
    s = ""
    pos = read_last_position()
    if pos <> 0:
        f.seek(pos)
    ch = f.read()
    while ch:
        s += ch
        ch = f.read()
    write_last_position(f.tell() -1)
    print s,
    f.close()

if __name__ == '__main__':
    write_last_position(0)
    raw_input("Cree un archivo de texto '/tmp/file.log' con algunos
caracteres")
    cron()
    raw_input("Agrege algunos caracteres al final del archivo
'/tmp/file.log'")
    cron()
    raw_input("Agrege unos caracteres mas al final del archivo
'/tmp/file.log'")
    cron()
===================  END CODE  ==================

Espero que te sirva, y me gustaría recibir comentarios, sugerencias para
mejorar "el estilo".

Un abrazo

César


2012/11/27 Agustin Henze <tin en sluc.org.ar>

> On 27/11/12 06:29, Alberto Benítez wrote:
> > Buenas,
> >
> > Estoy utilizando un parser que lee un log y hace determiandas acciones
> > dependiendo lo que encuentre, el problema esta en que el parser lo lanza
> > cron cada 5 minutos y leer siempre todo el fichero.
>
> fail2ban hace exactamente esto, fijate si no cumple directamente con tus
> requerimientos. El proyecto está escrito en python, así que podes sacar
> alguna idea de ahí mirando el código.
>
> > Que recomiendan para esto
> > -marcar la ultima linea leída
> > -tener dos ficheros y lo que lea en uno lo meto en otro
> >
> > ¿Alguna otra alternativa?
>
> Podés usar inotify y colgarte de los eventos que te hagan falta. Me
> parece que es la mejor opción.
>
> --
> TiN
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20121127/c50325d9/attachment.html>


More information about the pyar mailing list