使用 cmd 但不是来自 python 代码的命令

command working with cmd but not from python code

我正在尝试使用 avconv 将 test.mp4 文件从 python 代码转换为 test.wav。我可以使用 cmd 行将 test.mp4 转换为 test.wmv,但是当我 运行 来自 python 的相同命令时,它给我以下错误:

第 103 行,在 get_message_audio subprocess.call(命令行) FileNotFoundError: [WinError 2] 系统找不到指定的文件

我在 python 文件中使用的代码是:

命令行=['avconv', '-一世', 'test.mp4', '-vn', '-F', 'wav', 'test.wav']

subprocess.call(命令行)

但是当我 运行 来自 cmd 的相同命令时它成功 运行s 并保存 test.wav 文件。

cmd line = avconv -i test.mp4 -f wav test.wav

注意:我已将 avconv 添加到系统变量。 python 文件和 test.mp4 在同一个目录下。我也在同一目录中 运行ning 命令。

文件的位置可能不是您当前的工作目录。添加

import os

print(os.getcwd())

检查您的脚本在哪里查找文件。

如果那不是正确的位置,您可以使用

os.chdir(„your/file/directory“)

我猜它没有找到 avconv 可执行文件。我建议您在 Python 的命令中使用 avconv 的完整绝对路径。您可以尝试的另一件事是使用 shell,将 shell=True 添加到您的 subprocess.call() 调用中。

换句话说,这样做看看是否有帮助:

cmdline = [r'\full\path\to\avconv', '-i', 'test.mp4', '-vn', '-f', 'wav', 'test.wav']
subprocess.call(cmdline, shell=True)

我不认为这是它找不到的输入文件。它似乎没有那么远。在 subprocess.call(cmdline) 失败时,test.mp4test.wav 只是传递给 avconv.

的字符串

我的猜测是 avconv 不在 Python 是 运行 命令的环境的 PATH 中。 shell=True 可能会有所帮助。