cli php 获取输入,PHP CLI:如何从TTY中读取单个字符的输入(不等待输入键)?

我的解决办法是在TTY(使用stty)上设置-icanon模式。例如。:

stty -icanon

所以现在的代码是:

#!/usr/bin/php

system("stty -icanon");

echo "input# ";

while ($c = fread(STDIN, 1)) {

echo "Read from STDIN: " . $c . "\ninput# ";

}

?>

输出:

input# fRead from STDIN: f

input# oRead from STDIN: o

input# oRead from STDIN: o

input#

Read from STDIN:

input#

完成后,别忘了恢复TTY吗?

恢复tty配置

将终端重新设置为可以通过在更改之前保存tty状态来完成。完成后,您可以恢复到该状态。

例如:

// Save existing tty configuration

$term = `stty -g`;

// Make lots of drastic changes to the tty

system("stty raw opost -ocrnl onlcr -onocr -onlret icrnl -inlcr -echo isig intr undef");

// Reset the tty back to the original configuration

system("stty '" . $term . "'");

?>

这是保存tty的唯一方法,并将其放回用户开始之前。

请注意,如果您不担心保留原始状态,可以通过以下操作将其重置为默认的“合理”配置:

// Make lots of drastic changes to the tty

system("stty raw opost -ocrnl onlcr -onocr -onlret icrnl -inlcr -echo isig intr undef");

// Reset the tty back to sane defaults

system("stty sane");

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值