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

标签 php process exec proc-open

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

相关文章:

php - str_replace() 与 foreach、大写和精确单词匹配

python - "The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec()."错误是什么意思?

php - 如何强制 PHP 脚本在调用 exec() 后继续执行脚本?

fork() 和 execl() 调用后无法识别 C++ 命令 (Linux)

Apache 服务器中的 Python exec() 权限被拒绝 :/cgi_bin/*. py

php - 如何使用 PHP 将日期存储在 MySQL 数据库中?

php - 使用php动态地将内容插入到pdf文件中

php - 使用 `urlencode` 的 Symfony 4 Flex 数据库连接

c++ - 从同一进程中的 C++ 程序运行可执行文件

c# - 想要写我自己的 'Application Whitelisting Tool' 像 Bit9 这样的东西吗?