【问题标题】:subprocess.call can't find file/shutil.which failed in pycharmsubprocess.call 找不到文件/shutil.which 在 pycharm 中失败
【发布时间】: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 是一个包含平台特定文件操作的模块,如 joincurdiros.path('filename') 找不到像shutil.which(...) 那样的文件。
  • 是的,这是在窗口中,exe 位于文档文件夹中,但我猜每个人的位置都不同,因为我电脑上的路径是我在解压从官方网站下载的包时用 winrar 分配的

标签: python ffmpeg subprocess shutil


【解决方案1】:

如果你可以让“每个人”使用我的ffmpeg-downloader进行安装,那么你们所有人都可以通过以下方式安装 FFmpeg:

pip install ffmpeg-downloader
ffdl install

然后在 Python 中你的包可以使用

import ffmpeg_downloader as ffdl

sp.run([ffdl.ffmpeg_path, '-i', 'input.mp4', 'output.mkv'])

或者,您可以使用static-ffmpeg(动态)将 FFmpeg 安装到Lib/site-package。 (有关操作方法,请参阅链接的 GitHub 页面。)

【讨论】:

    猜你喜欢
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 2013-09-16
    相关资源
    最近更新 更多