求助:speech_recognition在.pyw文件中失效,.py文件可正常运行
.pyw运行语音助手失效的问题排查与修复
核心问题点
.pyw是Python无控制台窗口的脚本格式,和.py的运行环境有两个关键差异:
- 无控制台意味着你看不到任何报错信息,代码里的异常被静默吞掉后根本没法定位问题;
- 音频设备初始化、网络请求这类操作,在无窗口模式下可能因为权限或环境依赖无法正常执行。
分步修复方案
1. 先把错误日志打出来
修改异常捕获逻辑,把错误信息写入日志文件,这样即使.pyw运行也能知道哪里出问题:
import speech_recognition as sr from speech_recognition import Microphone import traceback device_index = 1 sample_rate = 48000 chunk_size = 1024 r = sr.Recognizer() while True: with Microphone(device_index=device_index, sample_rate=sample_rate, chunk_size=chunk_size) as source: r.adjust_for_ambient_noise(source, duration=0.7) r.pause_threshold = 1 # 原400秒太夸张,改成1秒合理值 try: audio = r.listen(source, timeout=None, phrase_time_limit=5) input_text = str(r.recognize_google(audio, language="it-IT", pfilter=0, show_all=False, with_confidence=False)).lower() with open("Inputs.txt", 'a') as fp: fp.write(input_text + "\n") # 加换行避免内容堆叠 except Exception as e: # 写入错误日志 with open("error_log.txt", 'a', encoding='utf-8') as log_fp: log_fp.write(f"错误内容: {str(e)}\n") log_fp.write(traceback.format_exc() + "\n\n") r = sr.Recognizer()
运行.pyw后查看error_log.txt,就能明确是音频设备问题、网络问题还是其他错误。
2. 排查音频设备问题
如果日志显示麦克风初始化失败:
- 先在
.py下运行以下代码,确认正确的麦克风设备索引(不要硬写死1):
import speech_recognition as sr for index, name in enumerate(sr.Microphone.list_microphone_names()): print(f"麦克风索引 {index}: {name}")
- 检查系统隐私设置,确保Python(包括
pythonw.exe)有麦克风访问权限。
3. 检查网络与权限
recognize_google依赖谷歌语音识别服务,需要联网:
- 确认
.pyw运行时的网络环境和.py一致,没有被防火墙、代理拦截; - 如果是离线场景,换用离线识别引擎(比如CMU Sphinx)。
内容的提问来源于stack exchange,提问作者Giulio
相关产品推荐
相关产品推荐

