从PHP写入stdin?

时间:2011-03-26 15:20:59

标签: php linux gnome stdio zenity

在linux中我想从PHP运行一个gnome zenity进度条窗口。 zenity的工作原理如下:

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

因此第一个命令以0%打开zenity进度条。 Zenity然后将标准输入数字作为进度条百分比(因此当您输入这些数字时,它将从10%变为50%到100%。)

我无法弄清楚如何让PHP输入这些数字,我试过了:

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

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

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

但他们都没有更新进度条。我能以什么方式模仿stdin对linux shell的影响,以获得更新其进度条的zenity?

1 个答案:

答案 0 :(得分:6)

您首先使用当前脚本的stdin副本执行命令,而不是您提供的文本。

你的第二次失败是因为你忘记了换行符。请尝试使用fwrite($handle, "10\n")。请注意,当达到EOF时,zenity似乎会跳转到100%(例如,在PHP脚本末尾隐式关闭$handle)。

你的第三次失败是因为你忘记了换行符并且你正在写错误的管道。请尝试使用fwrite($pipes[0], "10\n"),并记住与上述相同的EOF注释。