You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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程序已手动终止")

代码说明

  1. 事件监听替代轮询:keyboard.on_press_key()会在每次按下K键时触发回调函数,能精准捕获单次按键操作,不会像轮询那样重复触发状态切换
  2. 全局变量控制状态:running变量清晰控制打印的启停,每次按K就翻转它的值
  3. 添加延迟:time.sleep(0.5)既避免print输出过快刷屏,又让程序有空闲时间处理系统按键事件
  4. 异常捕获:用try-except捕获KeyboardInterrupt,方便你用Ctrl+C手动终止程序

注意事项

  • 在Linux或macOS上运行时,可能需要用sudo权限执行脚本(因为keyboard模块需要监听系统级按键事件)
  • Windows系统下可能需要以管理员身份运行终端,否则按键监听可能失效

内容的提问来源于stack exchange,提问作者MentalCombination

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:52:50