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);
}
}
我有两个 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);
}
}