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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:30:00