4

所以我打开一个进程$process = proc_open("my_process", $descriptors, $pipes);

然后我使用写入进程的标准输入fwrite($pipes[0], "some_command");

然后我必须先关闭管道,fclose($pipes[0]);然后才能使用$output = stream_get_contents($pipes[1]);. 如果我不关闭管道,我的 php 脚本将挂在此调用上。

但是,一旦我收到来自 stdout 的输出,如果我想向进程发送另一个命令……stdin 管道已关闭,所以我无法发送它。那么是否有可能以某种方式向进程发送另一个命令?

4

1 回答 1

2

听起来另一个进程正在阻塞等待 STDIN 上的 EOL 或 EOF。你想执行什么?

无论如何,这很有可能会解决它:只需附加\n到您发送到另一个进程的命令即可。

例如

$process = proc_open("my_process", $descriptors, $pipes);

$command = "some_command";
fwrite($pipes[0], $command."\n");

// Fetch the contents of STDOUT

现在,您可能还会遇到的一个问题与您正在使用的事实有关stream_get_get_contents()- 它会在 EOF 返回之前等待它。您可能需要更智能地了解如何从中检索数据$pipes[1]、使用fgets()和查找特定数量的行或字符串以指示输出的结束。

如果你告诉我们你在执行什么,我也许可以给你一个更具体的答案。

于 2012-07-24T13:55:59.733 回答