2011-03-26 29 views
6

En Linux quiero ejecutar una ventana de barra de progreso gnome zenity desde PHP. Cómo funciona zenity es así:Escribiendo a stdin desde PHP?

linux-shell$ zenity --display 0:1 --progress --text='Backing up' --percentage=0 
10 
50 
100 

El primer comando abre la barra de progreso de zenity al 0 por ciento. Zenity luego toma los números de entrada estándar como porcentaje de la barra de progreso (por lo que irá del 10% al 50% al 100% cuando ingrese esos números).

no puedo encontrar la manera de obtener PHP para escribir esos números sin embargo, he intentado:

exec($cmd); 
echo 10; 
echo 50; 

Y:

$handle = popen($cmd, 'w'); 
fwrite($handle, 10); 

Y:

$descriptorspec = array(
    0 => array("pipe", "r"), // stdin is a pipe that the child will read from 
    1 => array("pipe", "w") // stdout is a pipe that the child will write to 
); 

$h = proc_open($cmd, $descriptorspec, $pipes); 

fwrite($pipes[1], 10); 

Pero ninguno de ellos actualiza la barra de progreso. ¿De qué manera puedo imitar el efecto del stdin en el shell de linux para que zenity actualice su barra de progreso?

Respuesta

6

La primera ejecuta el comando con una copia del archivo stdin actual, no el texto que usted proporciona.

Tu segundo falla porque te estás olvidando de la nueva línea. Pruebe fwrite($handle, "10\n") en su lugar. Tenga en cuenta que zenity parece saltar al 100% cuando se alcanza EOF (por ejemplo, al cerrar implícitamente $handle al final de su script PHP).

Su tercero falla porque se está olvidando la nueva línea y está escribiendo en la tubería incorrecta. Pruebe fwrite($pipes[0], "10\n") y recuerde la misma nota con respecto a EOF que el anterior.

+0

¡Muchas gracias! No puedo creer que olvidé la nueva línea! :) – hamstar