如何实现以键盘输入为中断退出持续运行的无限while循环?
实现持续发送数据的循环,按键即退出
你原来的代码没法持续发送数据,问题出在input()是阻塞式的——每次循环都得等你输入完才会往下走,根本没法自动重复执行发送操作。要解决这个,我们可以用非阻塞的键盘监听,让程序一边循环发数据,一边悄悄盯着键盘,只要有按键按下就立刻退出循环。
方案一:用第三方库keyboard(简单易上手)
这个库专门用来处理键盘事件,代码写起来很直观:
- 先安装库:
pip install keyboard
- 示例代码:
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
相关产品推荐
相关产品推荐

