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

求助:speech_recognition在.pyw文件中失效,.py文件可正常运行

.pyw运行语音助手失效的问题排查与修复

核心问题点

.pyw是Python无控制台窗口的脚本格式,和.py的运行环境有两个关键差异:

  1. 无控制台意味着你看不到任何报错信息,代码里的异常被静默吞掉后根本没法定位问题;
  2. 音频设备初始化、网络请求这类操作,在无窗口模式下可能因为权限或环境依赖无法正常执行。

分步修复方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:25:15