Analizar continuamente el archivo en Python

Estoy escribiendo una secuencia de comandos que analiza un archivo con líneas de tráfico HTTP, saca los dominios y actualmente solo los imprime en la pantalla. Estoy usando httpry para escribir continuamente el tráfico en un archivo. Aquí está el script que estoy usando para quitar los nombres de dominio

#!/usr/bin/python import re input = open("results.txt","r") for line in input: domain = line.split()[6] if domain != "-": print domain 

Si bien este script funciona muy bien, me gustaría una forma de ejecutar este script de manera continua para que, a medida que se agregue nuevo tráfico al archivo de entrada, el script pueda eliminarlo. No puedo simplemente ejecutar awk en la salida de httpry, ya que eventualmente voy a ingresar estos dominios en una base de datos Mongo, y también necesitaré la secuencia de comandos para hacer eso. Si alguien pudiera darme algunas ideas sobre cómo ejecutar constantemente este script de Python en la salida, pero no reimprimir las entradas anteriores, sería muy apreciado. Gracias.

Pruebe esta implementación tail -f como se encuentra en http://code.activestate.com/recipes/157035-tail-f-in-python/

 import time while 1: where = file.tell() line = file.readline() if not line: time.sleep(1) file.seek(where) else: print line, # already has newline 

Node.js tiene un buen módulo readline que debería manejar esto muy bien:

 var readline = require('readline') , fs = require('fs') var input = process.stdin; // or: fs.createReadStream('input.txt'); var output = process.stdout; // or: fs.createWriteStream('output.txt') var reader = readline.createInterface({ input: input, output: output }); reader.on('line', function(line) { this.write(line.split(/[ ]+/)[6]); }); 

Guarde esto en un archivo .js y haga node domains.js , o como se llame. O cat file | node domains.js cat file | node domains.js .

También debería integrarse bien con mongodb en el futuro 🙂