php - 从 PHP 写入标准输入?

标签 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

所以第一个命令将 zenity 进度条打开为 0%。 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 上模仿 stdin 的效果来让 zenity 更新它的进度条?

最佳答案

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

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

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

关于php - 从 PHP 写入标准输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5443250/

相关文章:

php - 复杂的SQL函数, 'Syntax error or access violation: 1065 Query was empty'

linux - "make install"- 更改所有构建的输出目标

c - 如何在 Linux 下的 C 中找到文件路径中子文件夹的权限?

c - GTK 和 plplot 的例子?

php - 如何从此 Android 应用程序获取此 Google 登录 ID token 以验证服务器端?

php - 我在这里遇到错误,所以帮助我

php - python/php - 跨语言字符串压缩(使用 gzcompress/urlencode/json)

c - 在启动 linux 时以编程方式启动应用程序

linux - 使应用程序在启动时停留在单个工作区

linux - 如何生成.so文件