所以我用$process = proc_open("my_process", $descriptors, $pipes);
然后我使用fwrite($pipes[0], "some_command");
然后我必须使用fclose($pipes[0]);
关闭管道,然后才能使用$output = stream_get_contents($pipes[1]);
从管道stdout读取。如果我不关闭管道,那么我的php脚本就会挂起来。
但是一旦我收到了stdout的输出,如果我想向进程发送另一个命令... stdin管道已关闭,所以我无法发送它。那么有可能以某种方式向进程发送另一个命令吗?
答案 0 :(得分:2)
听起来其他进程阻止在STDIN上等待EOL或EOF。你想要执行什么?
无论如何,这很有可能将其解决:只需将\n
附加到您要发送给其他进程的命令。
E.g。
$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()
并查找特定数量的行或字符串以指示输出结束。
如果你告诉我们你正在执行什么,我可能会给你一个更具体的答案。