在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以更新其进度条?

有帮助吗?

解决方案

你的第一个用当前脚本的stdin的副本执行命令,而不是您提供的文本。

你的第二个失败,因为你忘了换行符。尝试fwrite($handle, "10\n")。注意,当达到EOF时,Zenity似乎跳到了100%(例如,通过PHP脚本末尾的$handle的隐式关闭)。

你的第三失败,因为你忘记了换行符,你写给了错误的管道。尝试fwrite($pipes[0], "10\n"),并记住与上面有关EOF的相同笔记。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top