python - 打开 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'
解决方案
不需要使用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。
推荐阅读
- google-api - 使用 Google Directory API 批量更新功能是否有任何限制?
- angular-formly - 如何将 FormlyConfig 用于 angular 4 的自定义类型
- facebook-javascript-sdk - 使用 javascript sdk 登录 Facebook 失败
- regex - 使用python使用正则表达式读取多行日志
- php - 如何修复 Laravel 5.7 中的错误 SimpleXMLElement?
- java - 尽管在函数内更改了输入,但函数返回输入不变
- javascript - 在回调中使用 await (Microsoft Bot Framework v4 nodejs)
- mysql - MySql:查看表格时将小数转换为百分比
- javascript - 如何获取组件的数据
- c++ - 使用英特尔 mkl 构建的 mxnet 总是抛出错误“英特尔 MKL 致命错误:无法加载 mkl_intel_thread.dll。”