[Python-es] Fwd: Lectura de archivos planos tipo logsurfer
Carlos Zuniga
carlos.zun en gmail.com
Lun Mar 28 00:59:46 CEST 2011
2011/3/27 Manuel Enrique González Ramírez <maengora en gmail.com>:
> El 27 de marzo de 2011 16:01, Alfonso de la Guarda <alfonsodg en gmail.com>
> escribió:
>>
>> Hola,
>>
>> contenido es un objeto de tipo file, por ende puedes emplear read(),
>> readlines() , etc.....
>>
>>
>>
>> Saludos,
>>
>> --------------------------------
>> Alfonso de la Guarda
>> Centro Open Source(COS)
>> http://www.cos-la.net
>> http://alfonsodg.net
>> Telef. 991935157
>> 1024D/B23B24A4
>> 5469 ED92 75A3 BBDB FD6B 58A5 54A1 851D B23B 24A4
>>
>>
>>
>> 2011/3/27 Carlos Herrera Polo <carlos.herrerapolo en gmail.com>:
>> > ---------- Forwarded message ----------
>> > From: Carlos Herrera Polo <carlos.herrerapolo en gmail.com>
>> > Date: Sun, 27 Mar 2011 22:58:54 +0200
>> > Subject: Re: Lectura de archivos planos tipo logsurfer
>> > To: Alfonso de la Guarda <alfonsodg en gmail.com>
>> >
>> > Buena idea, no se me habia ocurrido usar tail.
>> > La variable "contenido" en el ejemplo que representa ? Una lista ? Un
>> > texto enorme con el resultado de tail ?
>> >
>> > El 27/03/11, Alfonso de la Guarda <alfonsodg en gmail.com> escribió:
>> >> Hola,
>> >>
>> >> Pues yo emplearía (tal como lo he hecho antes) popen (aunque desde 2.6
>> >> ya es un método obsoleto)
>> >>
>> >> import os
>> >> contenido = os.popen("tail -n 50 /var/log/syslog")
>> >> print contenido.read()
>> >> if contenido.read() .,.....
>> >>
>> >> En tail cambia el 50 por la cantidad de líneas que quieras y
>> >> obviamente metelo en un loop (con pausa) o como una tarea programada
>> >> (cron)
>
> Y si al tail le agregas un grep para buscar algo en concreto te quedará más
> eficiente
>
> contenido = os.popen("tail -n 50 /var/log/syslog | grep -i 'error_a_buscar'
> ")
>
>>
>> >>
>> >>
>> >> Saludos,
>> >>
>> >> --------------------------------
>> >> Alfonso de la Guarda
>> >> Centro Open Source(COS)
>> >> http://www.cos-la.net
>> >> http://alfonsodg.net
>> >> Telef. 991935157
>> >> 1024D/B23B24A4
>> >> 5469 ED92 75A3 BBDB FD6B 58A5 54A1 851D B23B 24A4
>> >>
>> >>
>> >>
>> >> 2011/3/27 Carlos Herrera Polo <carlos.herrerapolo en gmail.com>:
>> >>> Ilustres, quisiera tener su opinion al respecto..
>> >>>
>> >>> Administro ciertos servidores linux, y consolido la informacion de los
>> >>> logs de estos en un unico servidor con el servicio syslog-ng, los logs
>> >>> son archivos planos que se almacenan en formato ASCII, un log por cada
>> >>> servicio/servicio.
>> >>> Quisiera desarrollar un programa simple que me alerte por correo de
>> >>> ciertos eventos que ocurren en los logs.... Existe un programa llamado
>> >>> logsurfer, escrito en C que hace esto...
>> >>> Mi idea es hacer un logsurfer pero en python, pero no se como trabajar
>> >>> la lectura de estos archivos planos que cada uno debe tener varios
>> >>> megas de peso, y son escritos cada segundo, ustedes como lo harian ?
>> >>> Porque hacer fileread por cada uno y luego irme hasta las ultimas
>> >>> filas como que no seria eficiente...
>> >>>
Si la preocupación es que sea eficiente, no sería mejor usar solamente
python en lugar de abrir más procesos?
Mira este algoritmo que implementa tail en python, es eficiente por
que comienza a buscar desde atrás, así que no lee el archivo completo
si no es necesario:
http://stackoverflow.com/questions/136168/get-last-n-lines-of-a-file-with-python-similar-to-tail/136368#136368
Saludos
--
Linux Registered User # 386081
A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
de leer manuales.
Más información sobre la lista de distribución Python-es