如何在Python中暂停与恢复while循环?实现按K键启停打印功能
解决循环打印Hello并通过K键切换启停的问题
我来帮你搞定这个问题!你的代码问题出在轮询按键的方式和循环的执行速度上,咱们一步步调整:
原代码的核心问题
- 你的循环一直在疯狂执行
print("hello"),导致程序几乎没有空闲时间去处理按键事件,响应极其滞后 - 使用
keyboard.is_pressed()在高速循环中会多次检测到按键按下的状态(哪怕你只按一次K,循环可能已经跑了几百次),导致running变量被反复切换,甚至可能因为系统资源占用过高直接触发终止 - 没有添加任何延迟,print输出刷屏会进一步拖慢程序响应
修正后的代码方案
我们改用按键事件监听的方式,配合适当的延迟来保证程序流畅响应:
import keyboard import time # 控制打印状态的全局变量 running = True def toggle_print_status(e): global running # 切换状态:暂停变恢复,恢复变暂停 running = not running # 给个反馈,方便确认状态变化 print(f"\n已{'恢复' if running else '暂停'}打印") # 绑定K键的按下事件:每次按K就调用toggle_print_status keyboard.on_press_key('k', toggle_print_status) try: while True: if running: print("Hello") # 添加0.5秒延迟:避免刷屏,同时给程序留时间处理按键事件 time.sleep(0.5) except KeyboardInterrupt: # 允许用Ctrl+C正常终止程序 print("\n程序已手动终止")
代码说明
- 事件监听替代轮询:
keyboard.on_press_key()会在每次按下K键时触发回调函数,能精准捕获单次按键操作,不会像轮询那样重复触发状态切换 - 全局变量控制状态:
running变量清晰控制打印的启停,每次按K就翻转它的值 - 添加延迟:
time.sleep(0.5)既避免print输出过快刷屏,又让程序有空闲时间处理系统按键事件 - 异常捕获:用
try-except捕获KeyboardInterrupt,方便你用Ctrl+C手动终止程序
注意事项
- 在Linux或macOS上运行时,可能需要用
sudo权限执行脚本(因为keyboard模块需要监听系统级按键事件) - Windows系统下可能需要以管理员身份运行终端,否则按键监听可能失效
内容的提问来源于stack exchange,提问作者MentalCombination
相关产品推荐
相关产品推荐

