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

调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:30:47