为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用PHP-CLI获取光标位置?

如何使用PHP-CLI获取光标位置?

PHP
慕尼黑的夜晚无繁华 2021-05-04 17:37:22
使用在CLI模式下运行的PHP脚本,我想以一种可移植的方式获取光标位置。带有代码:// Query Cursor Positionecho "\033[6n";在终端中,此代码报告光标位置,如下所示:wb ?> ./script.php ^[[5;1Rwb ?> ;1R 但是,我无法在代码中检索两个值(行:5,列:1)。经过对输出缓冲的一些测试之后:ob_start();echo "\033[6n";$s = ob_get_contents();file_put_contents('cpos.txt',$s);我在cpos.txt文件中输入了“ \ 033 [6n”,而不是设备的答案。并阅读STDIN:$timeout = 2;$sent = false;$t = microtime(true);$buf = '';stream_set_blocking(STDIN,false);while(true){    $buf .= fread(STDIN,8);    if(!$sent){        echo "\033[6n";        $sent = true;    }    if($t+$timeout<microtime(true))        break;}var_dump($buf);缓冲区为空,但终端显示设备答案:wb ?> ./script.php ^[[5;1Rstring(0) ""wb ?>有没有一种方法可以无误地获得光标位置?
查看完整描述

2 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

与“便携式”相比,使用硬编码的终端序列还有很长的路要走。尽管当前可用的大多数终端仿真器将支持具有共同基础的ANSI,vt100或xterm代码,但是有一个定义非常明确的API用于访问称为“ curses”的交互式终端。一个PHP扩展的PECL可用。这只是curses系统的存根接口-存在于任何Unix / Linux系统上。尽管可以使用cygwin或pdcurses在mswindows上进行设置,但这并不容易。您没有提及您正在使用的操作系统。(mswindows控制台使用ANSI序列)

有一个基于termcap(curses的前身)的工具包(hoa)可能会有用。

要“检索”您只需要从stdin中读取的数据(尽管建议对此使用非阻塞)。


查看完整回答
反对 回复 2021-05-21
  • 2 回答
  • 0 关注
  • 220 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信