как передать дополнительный параметр в функцию «my_hook» youtube-dl

#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. ЛОЛ. ХОРОШО, братан. прокомментируйте это, если вы поняли, как с этим бороться