Lectura de subproceso Python

Teniendo este codigo

p = subprocess.Popen('tail -f /var/log/syslog', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) for line in p.stdout.readlines(): print line, time.sleep(1) 

La secuencia de comandos se cuelga y no escribe ninguna línea, incluso si agrego algo a syslog.

¿Por qué?

readlines () no volverá hasta que haya un error de proceso en el proceso, que no habrá, ya que la cola nunca termina sin interrupciones.

Podría cambiar su bucle a:

 while True: print(p.stdout.readline()) 

A menos que desee un espacio adicional de 1s entre cada línea, no hay necesidad de dormir, ya que la línea de lectura se bloqueará, utilizando recursos mínimos, hasta que haya una línea completa disponible.

También puedes emular tail -f directamente en python.

Marque esto: cola -f en Python (receta de Python)

O esto: Emule el comando “tail -f” o Google para más ejemplos.