PHP CLI - 同时管道和提示?

PHP CLI - Piping and prompting at the same time?

我有两个 php cli 脚本。第一个将数据通过管道传输到第二个。 我希望第二个提示用户进行确认。 这可能吗?

我正在使用 wordpress'php-cli-tools,但从我的基本测试来看,我的问题似乎一般适用于 php。 (即 fgets()、readline 等)

我永远无法获得工作提示,因为看起来它总是会从之前的输入中读取 EOT 字符,即使我已经读取了它...

然后,稍后,当我使用 fwrite 进行输出然后使用 fgets() 进行输入时,没有任何反应。程序只是在等待某事发生……不确定是什么…… 如果我使用该库,我会收到错误 'Caught ^D during input'。 readline 也不走运...

以前有人做过吗?

非常感谢!

这个问题并不是 PHP 特有的,它适用于任何语言。在 Unix 上,如果您想忽略输入重定向并直接从终端读取,您可以从 /dev/tty 而不是从标准输入读取。

function prompt_user($prompt) {
    $terminal = fopen("/dev/tty", "r+");
    if ($terminal) {
        fputs($terminal, $prompt);
        return fgets($terminal);
    }
}