gpt4 book ai didi

php - 对使用 proc_open 打开的进程进行多次写入

转载 作者:搜寻专家 更新时间:2023-10-31 21:14:43 24 4
gpt4 key购买 nike

所以我用 $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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com