开发者

Writing to stdin from PHP?

开发者 https://www.devze.com 2023-02-19 18:24 出处:网络
In linux I want to run a gnome zenity progress bar window from PHP.How zenity works is like this: linux-shell$ zenity --display 0:1 --progress --text=\'Backing up\' --percentage=0

In linux I want to run a gnome zenity progress bar window from PHP. How zenity works is like this:

linux-shell$ zenity --display 0:1 --progress --text='Backing up' --percentage=0
10开发者_JS百科
50
100

So the first command opens the zenity progress bar at 0 percent. Zenity then takes standard input numbers as the progress bar percentage (so it will go from 10% to 50% to 100% when you type those numbers in).

I can't figure out how to get PHP to type in those numbers though, I have tried:

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

And:

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

And:

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

But none of them updates the progress bar. In what way can I mimic the effect of the stdin on the linux shell to get zenity to update its progress bar?


Your first executes the command with a copy of the current script's stdin, not the text you provide.

Your second fails because you are forgetting the newline. Try fwrite($handle, "10\n") instead. Note that zenity seems to jump to 100% when EOF is reached (e.g. by the implicit close of $handle at the end of your PHP script).

Your third fails because you are forgetting the newline and you are writing to the wrong pipe. Try fwrite($pipes[0], "10\n") instead, and remember the same note regarding EOF as above.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号