6

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

但是它们都没有更新进度条。我可以通过什么方式模仿标准输入在 linux shell 上的效果来获得 zenity 来更新其进度条?

4

1 回答 1

6

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

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

您的第三个失败是因为您忘记了换行符并且您正在写入错误的管道。请尝试fwrite($pipes[0], "10\n"),并记住与上述有关 EOF 的相同注意事项。

于 2011-03-26T15:40:56.340 回答