如何用Python keyboard包抑制RPi相机脚本中的按键输出
解决RPi相机脚本中按键回显问题
问题核心:使用keyboard.is_pressed()检测按键时,'p'和'q'的字符会被终端回显,导致输出混乱(如pPicture taken and saved),需要抑制这些按键的终端输出,同时保留拍照和退出功能。
原因分析
keyboard.is_pressed()仅检测按键状态,不会拦截或消费按键事件,因此终端仍会接收并显示按下的字符,干扰正常输出。
解决方案
利用keyboard库的按键拦截功能,通过以下两种方式实现抑制回显:
方案1:按键回调(推荐,非阻塞)
通过keyboard.on_press_key()注册按键回调函数,设置suppress=True阻止按键事件传递到终端:
from picamera2 import Picamera2, Preview import keyboard import sys cam = Picamera2() cam.start_preview(Preview.QTGL) cam.start() savepath = '/home/pk/camera/image/' imgname = "picture" def take_photo(e): request = cam.capture_request() request.save("main", savepath + imgname, format="png") print("Picture taken and saved") def exit_program(e): print("Closing camera...") cam.stop_preview() cam.stop() cam.close() sys.exit() # 注册按键并抑制回显 keyboard.on_press_key("p", take_photo, suppress=True) keyboard.on_press_key("q", exit_program, suppress=True) # 保持程序运行 keyboard.wait()
方案2:阻塞式按键读取
使用keyboard.read_key(suppress=True)读取按键并直接抑制回显:
from picamera2 import Picamera2, Preview import keyboard cam = Picamera2() cam.start_preview(Preview.QTGL) cam.start() savepath = '/home/pk/camera/image/' imgname = "picture" try: while True: # 读取按键并抑制回显 key = keyboard.read_key(suppress=True) if key == "p": request = cam.capture_request() request.save("main", savepath + imgname, format="png") print("Picture taken and saved") elif key == "q": print("Closing camera...") break finally: cam.stop_preview() cam.stop() cam.close()
效果说明
两种方案都能避免终端回显'p'和'q'字符,输出将仅显示设定的提示内容:
Picture taken and saved Closing camera...
内容的提问来源于stack exchange,提问作者EE_G_RLP
相关产品推荐
相关产品推荐

