Actualmente estoy escribiendo un programa en python en un sistema Linux. El objetivo es leer un archivo de registro y ejecutar un comando bash al encontrar una cadena en particular. El archivo de registro está siendo escrito constantemente por otro programa. Mi pregunta es:Lectura de un archivo que se actualiza con frecuencia
Si abro el archivo usando el método open(), mi objeto de archivo Python se actualizará a medida que el otro programa escriba el archivo real o tendré que volver a abrir el archivo a intervalos de tiempo.
Gracias
Jim
ACTUALIZACIÓN: Gracias por las respuestas hasta ahora. Tal vez debería haber mencionado que el archivo está siendo escrito por una aplicación Java EE, por lo que no tengo control sobre cuándo se escriben los datos. Actualmente tengo un programa que vuelve a abrir el archivo cada 10 segundos e intenta leer desde la posición de bytes en el archivo que leyó por última vez. Por el momento solo imprime la cadena que se devuelve. Esperaba que el archivo no necesitara ser reabierto, pero el comando de lectura de alguna manera tendría acceso a los datos escritos en el archivo por la aplicación Java.
#!/usr/bin/python
import time
fileBytePos = 0
while True:
inFile = open('./server.log','r')
inFile.seek(fileBytePos)
data = inFile.read()
print data
fileBytePos = inFile.tell()
print fileBytePos
inFile.close()
time.sleep(10)
Gracias por los consejos sobre pyinotify y generadores. Voy a echar un vistazo a estos para encontrar una mejor solución.
Esta respuesta debe aceptarse – Quinma
Superaría si la respuesta contuviera un ejemplo de código en términos del código del OP. –
@ Chiel92: ejemplo de código agregado del sitio de David Beazley –