在Python中,我想在MacOS上检测按键,而不使用非标准的第三方库.以下是我的测试代码:
import select
import sys
import termios
from time import sleep
def is_key_pressed():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
new_settings = termios.tcgetattr(fd)
new_settings[3] = new_settings[3] & ~(termios.ECHO | termios.ICANON)
termios.tcsetattr(fd, termios.TCSADRAIN, new_settings)
ready, _, _ = select.select([sys.stdin], [], [], 0)
return sys.stdin in ready
finally:
termios.tcsetattr(fd, termios.TCSAFLUSH, old_settings)
def main():
print("Testing select:")
sleep_time = 1 / 60
while True:
sleep(sleep_time)
if is_key_pressed():
break
if __name__ == "__main__":
main()
它实际上可以检测到按下的键.但有一个问题:输入字符被 echo .我试图通过禁用termios.ECHO
来禁用回声,但它似乎不起作用.
以下是在MacOS上进行测试的结果:
$ python test.py
Testing select:
1%
(在测试过程中按了键‘1’).
第二个问题是:为什么最后会有一个%
?
我想要的是:没有"1"的回声,也没有"%".