调用subprocess执行sox时提示文件不存在(文件实际存在)
解决Windows 11下subprocess调用sox报错的问题
核心问题定位
你当前的核心问题是系统层面未识别到sox命令——PowerShell中无法执行sox,Python的subprocess自然也找不到对应可执行文件。另外,通过pip安装的sox只是Python封装库,并非原生的sox命令行工具,所以最初的安装方式对解决问题无效。
分步解决方法
1. 正确配置sox的系统PATH
- 找到官网下载的sox解压后,定位到包含
sox.exe的bin文件夹(例如C:\sox-14.4.2-win64\bin)。 - 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」,在「系统变量」中找到
Path,点击「编辑」,将上述bin文件夹路径添加进去。 - 必须重启所有已打开的PowerShell和Python编辑器——PATH变更仅对新启动的进程生效,旧窗口仍会使用原有PATH配置。
2. 验证sox是否生效
打开新的PowerShell窗口,输入sox --version,若返回版本信息则配置成功;若仍报错,检查:
- 路径是否填写错误(无需加引号,路径含空格时直接填写即可)。
- 是否误将sox根目录而非
bin目录添加到PATH。
3. Python代码的正确调用方式
配置完成后,subprocess可直接调用sox命令:
import subprocess wav_path = "你的WAV文件绝对路径" # 获取音频时长 result = subprocess.run( ["sox", "--i", "-D", wav_path], capture_output=True, text=True, check=True ) duration = float(result.stdout.strip()) print(f"音频时长:{duration}秒")
若仍担心PATH问题,可直接指定sox.exe的绝对路径:
result = subprocess.run( ["C:\\sox-14.4.2-win64\\bin\\sox.exe", "--i", "-D", wav_path], capture_output=True, text=True, check=True )
4. 音频切割与频谱图生成示例
- 切割音频(从第2秒开始截取5秒):
subprocess.run( ["sox", wav_path, "指定文件夹/output.wav", "trim", "2", "5"], check=True )
- 生成频谱图:
subprocess.run( ["sox", wav_path, "-n", "spectrogram", "-o", "指定文件夹/output_spectrogram.png"], check=True )
内容的提问来源于stack exchange,提问作者Helana Brock
相关产品推荐
相关产品推荐

