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

如何实现以键盘输入为中断退出持续运行的无限while循环?

实现持续发送数据的循环,按键即退出

你原来的代码没法持续发送数据,问题出在input()是阻塞式的——每次循环都得等你输入完才会往下走,根本没法自动重复执行发送操作。要解决这个,我们可以用非阻塞的键盘监听,让程序一边循环发数据,一边悄悄盯着键盘,只要有按键按下就立刻退出循环。

方案一:用第三方库keyboard(简单易上手)

这个库专门用来处理键盘事件,代码写起来很直观:

  1. 先安装库:
pip install keyboard
  1. 示例代码:
import keyboard
import time

running = True

def stop_loop(event):
    global running
    running = False
    print("\n检测到按键,马上退出循环")

# 注册监听:按下任意键就触发stop_loop函数
keyboard.on_press(stop_loop)

print("开始持续发送数据,按下任意键即可退出...")
while running:
    # 这里替换成你实际的发送数据逻辑
    print("正在发送数据...", end='\r')  # 用\r让输出在同一行刷新,避免刷屏
    time.sleep(0.5)  # 模拟发送间隔,可根据实际需求调整

# 用完记得释放监听资源
keyboard.unhook_all()
print("\n循环已终止")

方案二:用Python标准库(无需额外安装)

如果不想装第三方库,不同系统可以用对应的标准库方法:

适用于Windows系统

用msvcrt模块检测按键:

import msvcrt
import time

print("开始持续发送数据,按下任意键退出...")
while True:
    # 替换成你的发送数据逻辑
    print("正在发送数据...", end='\r')
    time.sleep(0.5)
    
    # 检查是否有按键按下
    if msvcrt.kbhit():
        msvcrt.getch()  # 读取按键,避免残留输入
        print("\n检测到按键,退出循环")
        break

适用于Unix/Linux系统

用select模块监听标准输入:

import sys
import select
import time

print("开始持续发送数据,按下任意键退出...")
while True:
    # 替换成你的发送数据逻辑
    print("正在发送数据...", end='\r')
    time.sleep(0.5)
    
    # 非阻塞检查是否有输入
    if select.select([sys.stdin], [], [], 0)[0]:
        sys.stdin.readline()  # 读取输入内容
        print("\n检测到按键,退出循环")
        break

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 23:35:07