gpt4 book ai didi

Python跨平台监听按键?

转载 作者:IT老高 更新时间:2023-10-28 21:13:55 26 4
gpt4 key购买 nike

我需要在 python 终端程序中监听某些按键,而不用 raw_input 暂停执行。我已经看到人们使用一些特定于 Windows 的方式来监听击键,并且我看到人们使用大型模块,如 tkinter 和 pygame,我想避免这些。

是否有一个轻量级模块可以跨平台(至少是 ubuntu、windows、mac)?或者有没有办法只使用来自 tkinter、pygame 等的事件系统?

如果不是,我应该如何解决这个问题?我的第一个想法是将标准输入重定向到另一个进程并继续检查它是否包含我的一个事件键。


编辑

感谢@unutbu 抽出时间将这个 3 年前的问题标记为与另一个问题的答案不适用的问题重复,因为我专门询问了非阻塞解决方案。

最佳答案

我不知道有任何跨平台轻量级模块可以监听按键。但如果你想实现一些简单的东西,这里有一个建议:

getting a single keypress at a time 上查看此问题在 Python 常见问题解答中。你可以尝试一下阻塞来自 sys.stdinthreading 的读取。但这可能只适用于 Unix。在 Windows 上,您可以使用 msvcrt.kbhit .

结合 Python FAQ 中的按键配方和 msvcrt 模块,生成的 kbhit 函数将如下所示:

try:
from msvcrt import kbhit
except ImportError:
import termios, fcntl, sys, os
def kbhit():
fd = sys.stdin.fileno()
oldterm = termios.tcgetattr(fd)
newattr = termios.tcgetattr(fd)
newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
termios.tcsetattr(fd, termios.TCSANOW, newattr)
oldflags = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK)
try:
while True:
try:
c = sys.stdin.read(1)
return True
except IOError:
return False
finally:
termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)

关于Python跨平台监听按键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5044073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com