Ubuntu 22.04下实现按键触发方法调用应使用哪个Linux库?
在Ubuntu 22.04下实现按键触发Python方法的方案
修正你现有的keyboard库代码
你当前的代码存在两处问题:一是导入keyboard模块后误用了未定义的key对象;二是无限轮询会导致CPU占用过高。修正后该库可在Linux下正常工作:
首先安装库:
pip install keyboard
修正后的代码:
import keyboard import time my_list = ["a","b","c"] # 避免用`list`作为变量名,会覆盖内置类型 while True: try: if keyboard.is_pressed('i'): print("执行index操作结果:", my_list.index("a")) time.sleep(0.2) # 防止短时间内重复触发 elif keyboard.is_pressed('c'): print("执行count操作结果:", my_list.count("a")) time.sleep(0.2) time.sleep(0.01) # 降低CPU占用率 except Exception as e: print(f"错误详情: {e}") break
更高效的事件驱动方案:使用pynput库
pynput是跨平台的输入监听库,在Linux下稳定性优异,采用事件驱动模式(无需轮询),资源占用更低。
安装:
pip install pynput
示例代码:
from pynput.keyboard import Listener, Key my_list = ["a","b","c"] def on_press(key): try: if key.char == 'i': print("执行index操作结果:", my_list.index("a")) elif key.char == 'c': print("执行count操作结果:", my_list.count("a")) except AttributeError: # 忽略Ctrl、Shift等特殊按键 pass def on_release(key): # 按Esc键退出监听 if key == Key.esc: return False # 启动监听器 with Listener(on_press=on_press, on_release=on_release) as listener: listener.join()
无需额外安装:使用标准库curses
如果不想依赖第三方库,Python内置的curses库可在终端环境下实现按键监听,适合纯终端场景。
示例代码:
import curses my_list = ["a","b","c"] def main(stdscr): curses.curs_set(0) # 隐藏光标 stdscr.nodelay(True) # 设置非阻塞模式 while True: key = stdscr.getch() if key == ord('i'): print("执行index操作结果:", my_list.index("a")) elif key == ord('c'): print("执行count操作结果:", my_list.count("a")) elif key == ord('q'): break curses.napms(10) # 降低CPU占用 curses.wrapper(main)
内容的提问来源于stack exchange,提问作者Parham Adeli
相关产品推荐
相关产品推荐

