#python #youtube-dl
Вопрос:
import youtube_dl
def my_hook(d,`some parameter`):
...
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download("link" , 'some parameter')
Как я могу перейти some parameter
к my_hook
функции? Я хочу передать объект сокета в my_hook
функцию, чтобы сообщить о последнем ходе загрузки на другую машину. Как я могу его пройти?
Комментарии:
1. Привет, что ты до сих пор пробовал ?
2. Я просто настроил сервер websocket, отклонил ссылку на YouTube, загрузил ее и сообщил клиенту о ходе загрузки. если у нас есть один веб-сайт (один клиент), мы можем использовать глобальную переменную для передачи объекта веб-сайта клиента, чтобы мы могли использовать его
my_hook
для отправки статуса загрузки. но если у нас есть несколько загрузок одновременно, я не могу понять, какойmy_hook
из них отправить статус загрузки какому клиенту websocket obj . поэтому мне нужно передать объекту websocket клиентаmy_hook
, чтобы отправить статус загрузки в соответствующий объект websocket, и я не могу его передать
Ответ №1:
#! /usr/bin/env python3
import youtube_dl
def progress_hook( response ):
## send response['status'] to whatever subprocess you have going on.
print( response['status'] )
ydl_opts = {
'progress_hooks': [progress_hook],
## other options, resolution amp; whatnot
}
link = 'm.youtube.com/watch?v=dQw4w9WgXcQ'
with youtube_dl .YoutubeDL( ydl_opts ) as ydl:
## metadata = ydl .extract_info( link, download=False )
## print( metadata )
ydl .download( [link, ydl_opts] )
Комментарии:
1. я знаю, как получить текущее состояние загрузки, но весь код находится на сервере websocket, и мне нужно передать объект клиента websocket
my_hook
, чтобы отправить состояние загрузки клиенту websocket. просто скажите мне, как передать что-то(переменную) изydl.download
вmy_hook
2. Что, ты имеешь в виду
argparse
? Об этом уже столько статей написано.3. предположим, я получаю ссылку на YouTube с помощью websocket и загружаю их, у меня есть несколько запросов на одновременную загрузку, я хочу знать, какой
my_hook
из них относится к какому запросу (веб-сайт клиента), чтобы сообщить им о статусе загрузки. я не могу различать запросы4. Для этого потребуется класс с локальными экземплярами ydl. Просто попробовал запустить его с помощью argparse, потому что я думал, что это будет просто, но ydl начинает жаловаться на непризнанные аргументы. Ожидал, что аргпарс перехватит их. Да, это потребует некоторых размышлений. Но сначала мне нужно поспать.
5. ЛОЛ. ХОРОШО, братан. прокомментируйте это, если вы поняли, как с этим бороться