首页 > 解决方案 > 打开 exe 文件时 subprocess.run 抛出未找到错误 heroku

问题描述

我正在尝试使用 youtube-dl 从 youtube 下载视频,为此我正在使用 subprocess.run

代码必须使用参数打开 youtube-dl.exe(视频链接)

import subprocess

link = 'https://www.youtube.com/watch?v=k4iMyMQTpeo'
subprocess.run(['youtube-dl.exe',link], shell=True)

当我在本地运行时一切正常,但是当我在 Heroku 上运行它时,它给了我这个错误

2021-07-21T02:20:03.534926+00:00 heroku[web.1]: Process exited with status 0
2021-07-21T02:20:03.699504+00:00 heroku[web.1]: State changed from starting to crashed
2021-07-21T02:20:03.447886+00:00 app[web.1]: https://www.youtube.com/watch?v=k4iMyMQTpeo: 1: youtube-dl.exe: not found

我试过的

我尝试使用 PowerShell 运行它

subprocess.run(['powershell','youtube-dl.exe',link],shell=True)

但它给出了一个类似的错误

2021-07-20T22:10:32.167473+00:00 heroku[web.1]: Starting process with command `python3 main.py`
2021-07-20T22:10:38.880962+00:00 app[web.1]: ./youtube-dl.exe: 1: powershell: not found

我尝试将 shell 更改为 false,但它不起作用,我尝试列出目录以确保 youtube-dl.exe 存在

2021-07-21T03:28:18.106973+00:00 app[web.1]: ['youtube-dl.exe', 'requirements.txt', '.profile.d', 'UNILAD responds!-k4iMyMQTpeo.f248.webm.part', '.heroku', 'Procfile', 'main.py', 'runtime.txt']
2021-07-21T03:28:18.114136+00:00 app[web.1]: Traceback (most recent call last):
2021-07-21T03:28:18.114144+00:00 app[web.1]:   File "/app/main.py", line 13, in <module>
2021-07-21T03:28:18.114470+00:00 app[web.1]:     subprocess.run(['youtube-dl.exe',link], shell=False)
2021-07-21T03:28:18.114506+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.9/subprocess.py", line 505, in run
2021-07-21T03:28:18.114919+00:00 app[web.1]:     with Popen(*popenargs, **kwargs) as process:
2021-07-21T03:28:18.114952+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.9/subprocess.py", line 951, in __init__
2021-07-21T03:28:18.115812+00:00 app[web.1]:     self._execute_child(args, executable, preexec_fn, close_fds,
2021-07-21T03:28:18.115843+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.9/subprocess.py", line 1821, in _execute_child
2021-07-21T03:28:18.117287+00:00 app[web.1]:     raise child_exception_type(errno_num, err_msg, err_filename)
2021-07-21T03:28:18.117408+00:00 app[web.1]: FileNotFoundError: [Errno 2] No such file or directory: 'youtube-dl.exe'

标签: pythonherokusubprocess

解决方案


不需要使用subprocess模块,youtube-dl直接使用即可。

请安装youtube_dl

pip3 install youtube_dl

然后您可以下载视频,例如:

from __future__ import unicode_literals
import youtube_dl

ydl_opts = {}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['https://www.youtube.com/watch?v=BaW_jenozKc'])

最后,将其部署到 Heroku。


推荐阅读