Python中等待用户输入时如何让循环保持正常运行?
问题原因
Python内置的input()是同步阻塞函数,调用后会暂停当前线程执行,直到收到用户输入才会继续向下执行,所以原代码的循环会被卡在输入步骤,无法定时播放提示音。
通用跨平台解决方案(多线程实现)
将用户输入监听逻辑放到独立的子线程执行,主线程负责定时播放提示音,直到收到用户输入的yes就终止流程。
实现代码
import audio import time import threading # 存储用户输入内容,使用可变列表实现子线程和主线程的状态共享 user_input = [""] def input_listener(): while user_input[0] != "yes": user_input[0] = input("WAITING FOR INPUT\n") # 启动输入监听守护线程,主程序退出时线程会自动销毁 listener_thread = threading.Thread(target=input_listener, daemon=True) listener_thread.start() # 主线程循环播放提示音 while user_input[0] != "yes": audio(driver, 'ding.mp3') time.sleep(3)
注意事项
- 如果需要更规范的线程间通信,可以替换为
queue.Queue传递输入内容,避免共享可变对象的潜在风险 - 守护线程的标记可以保证你关闭主程序时不会残留后台进程
Windows平台专属轻量方案(无需多线程)
如果程序仅需在Windows环境运行,可以调用系统内置的msvcrt模块实现非阻塞输入检测,不需要启动额外线程:
import audio import time import msvcrt input_buf = "" print("WAITING FOR INPUT") while True: # 检测是否有按键输入 if msvcrt.kbhit(): get_char = msvcrt.getche() # 按下回车判定输入完成 if get_char == b"\r": if input_buf == "yes": break input_buf = "" print("\nWAITING FOR INPUT") else: input_buf += get_char.decode() # 播放提示音 audio(driver, 'ding.mp3') time.sleep(3)
内容的提问来源于stack exchange,提问作者slamalon
相关产品推荐
相关产品推荐

