【发布时间】:2022-12-05 02:57:07
【问题描述】:
我正在尝试将 mp3 转换为 wav 文件pycharm使用子流程
import subprocess
subprocess.call(['ffmpeg', '-i','test.mp3','test.wav'])
它返回找不到文件的错误,所以我将 'ffmpeg' 更改为其在我的电脑上的路径并且它可以工作。
问题是我正在制作一个应用程序,其他人可能会在其他人的位置安装 ffmpeg(因为它是用 zip 下载的,可以在任何地方解压缩),但我不知道如何获得它的完整路径。
我尝试使用os模块
import os
print(os.path('ffmpeg.exe'))
但是好像获取不到exe的路径
Traceback (most recent call last):
File "C:\Users\Percy\PycharmProjects\APP\test3.py", line 8, in <module>
print(os.path('ffmpeg.exe'))
TypeError: 'module' object is not callable
我也试过shutil模块
import shutil
print(shutil.which('ffmpeg'))
print(shutil.which('ffmpeg.exe'))
但它返回 2 None(可能是错误的,因为我 100% 确定我已经安装了 ffmpeg)
None
None
我想问一下有没有什么办法可以得到ffmpeg的完整路径在pycharm或者我可以在用户下载应用程序时将 ffmpeg 安装在指定路径中的任何方法
【问题讨论】:
-
这是在 Windows 上? .exe 路径是什么?基于 Unix 的系统具有存储二进制文件的公共目录,这些目录位于 PATH 变量中。但 Windows 通常不会这样做。 Windows 99% 专注于通过单击它们或通过 COM 查找服务来运行 gui。它从未将在 PATH 上查找 .exe 作为优先事项。那么,你是如何安装 ffmpeg 的?它是否有将其目录添加到 PATH 的选项?您可能需要将 ffmpeg 路径作为配置选项。
-
如果该文件不在您程序的同一文件夹中,则无法从中看到它。你可以尝试给出完整的路径。如果你在 Linux 上,通用路径类似于“/home/%user%/folder/file”,对于 Windows“C:/path to the file/”
-
@alexlongo - 对于通过子进程调用的可执行文件,位于同一目录中无济于事。这是操作系统执行,而不是 python 导入。该文件必须位于路径中或使用限定路径。 OP做过使用完整的路径,这是有效的。但这不是通用的解决方案。
-
os.path是一个包含平台特定文件操作的模块,如join和curdir。os.path('filename')找不到像shutil.which(...)那样的文件。 -
是的,这是在窗口中,exe 位于文档文件夹中,但我猜每个人的位置都不同,因为我电脑上的路径是我在解压从官方网站下载的包时用 winrar 分配的
标签: python ffmpeg subprocess shutil