在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()
它实际上检测到按键被按下。但是有一个问题:输入的字符会被回显。我试图通过禁用
termios.ECHO
但它似乎不起作用。
以下是macOS测试的输出:
$ python test.py
Testing select:
1%
(在测试过程中按下按键“1”)。
第二个问题是:为什么会有
%
显示在最后?
我想要的是:既没有“1”的回声,也没有“%”的回声。