Progreso de AJAX: lectura de la salida de la Shell

Objetivo : crear una barra de progreso donde los usuarios puedan verificar qué cantidad de archivos ha descargado mi servidor.

Escenario : Tengo un script PHP que ejecuta un script de python a través de popen. He hecho esto así:

$handle = popen('python last', 'r'); $read = fread($handle, 4096); pclose($handle); 

Este script de python da como resultado el shell algo como esto:

 [last] ZVZX-W3vo9I: Downloading video webpage [last] ZVZX-W3vo9I: Extracting video information [download] Destination: myvideo.flv [download] 9.9% of 10.09M at 3.30M/s ETA 00:02 

Problema : cuando leo en el archivo generado por la salida del shell obtengo toda la salida del shell excepto la última línea? ¿POR QUÉ?

Solo para agregar, cuando ejecuto el comando a través del shell, el cursor del shell aparece al final de esa línea y espera hasta que el script esté listo.

Gracias a todos

Lo primero que me viene a la mente es que tal vez el progtwig detecte que no se ejecuta en un TTY y, por lo tanto, no muestra la última línea, que probablemente involucre caracteres de control desagradables porque esa línea parece actualizarse a sí misma.

¿Qué sucede cuando redirige la salida a un archivo (en el shell) o lo canaliza menos? Si no ve la última línea allí, es probable que este sea el caso. No sé de otra solución que arreglar la fuente.

¿Estás leyendo hasta EOF?

 $handle = popen('python last', 'r'); $read = ""; while (!feof($handle)) { $read .= fread($handle, 4096); } pclose($handle); 

Este será tu amigo:

 $handle = popen('python last 2>&1', 'r'); 

Más información se puede encontrar aquí: Wikipedia