所以我用 $process = proc_open("my_process", $descriptors, $pipes); 打开一个进程
然后我使用 fwrite($pipes[0], "some_command");
然后我必须使用 fclose($pipes[0]);
关闭管道,然后才能使用 $output = stream_get_contents($pipes[1]) 从管道标准输出中读取;
。如果我不关闭管道,我的 php 脚本将挂起。
但是一旦我收到来自 stdout 的输出,如果我想向进程发送另一个命令怎么办...stdin 管道已关闭,所以我无法发送它。那么是否有可能以某种方式向进程发送另一个命令?
最佳答案
听起来其他进程正在阻塞等待 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()
并查找特定数量的行或指示输出结束的字符串。
如果您告诉我们您正在执行什么,我也许可以给您一个更具体的答案。
关于php - 对使用 proc_open 打开的进程进行多次写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11632291/