2011-03-26 12 views
6

In Linux voglio eseguire una barra di avanzamento di gnome zenity da PHP. Come funziona zenity è così:Scrivere su stdin da PHP?

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

Quindi il primo comando apre la barra di avanzamento di zenity a 0 percento. Zenity quindi prende i numeri di input standard come percentuale della barra di avanzamento (quindi passerà dal 10% al 50% al 100% quando si digitano quei numeri in).

io non riesco a capire come ottenere PHP per inserire quei numeri, però, ho provato:

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

E:

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

E:

$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); 

Ma nessuno di loro aggiorna la barra di avanzamento. In che modo posso simulare l'effetto dello stdin sulla shell di linux per far sì che zenity aggiorni la sua barra di avanzamento?

risposta

6

Il tuo primo esegue il comando con una copia dello stdin dello script corrente, non del testo che fornisci.

Il secondo non riesce perché si sta dimenticando la nuova riga. Prova invece a fwrite($handle, "10\n"). Nota che zenity sembra saltare al 100% quando EOF viene raggiunto (ad esempio dalla chiusura implicita di $handle alla fine dello script PHP).

Il terzo fallisce perché si sta dimenticando la newline e si sta scrivendo nella pipe sbagliata. Prova invece a fwrite($pipes[0], "10\n") e ricorda la stessa nota relativa a EOF come sopra.

+0

Grazie mille! Non posso credere di aver dimenticato la nuova riga! :) – hamstar