Получить вывод функции в Python в переменной

Мой скрипт python загружает видео с YouTube с помощью библиотеки youtube-dl. Он только печатает прогресс и не возвращает значение прогресса. Я должен качать прогресс на мою HTML-страницу. Использование return() дает код только как 0 или нет. JavaScript настроен на получение возвращаемого значения и добавление его в текстовое поле. Настроить библиотеку невозможно, так как она огромна.

stream.download(quiet=False, filepath=outfilepath)

Это вызывает модуль pafy, который далее вызывает youtube-dl.

 16,498,967.0 Bytes [100.00%] received. Rate: [5446 KB/s].  ETA: [0 secs]

Этот вывод не передается в HTML, а печатается в оболочке python. Как получить этот вывод на моей HTML-странице?

1 ответ

Решение

Одно из возможных решений - переопределить встроенный sys.stdout.write метод, который используется pafyдля печати на консоли. Вы также можете заставить его регистрировать операторы печати в структуре данных.

В следующем коде я использовал список для хранения всех строк, переданных в sys.stdout.writeфункция. В этот список будут занесены все ваши распечатки о ходе загрузки. Вы всегда можете получить доступ к своему последнему журналу из списка.

import pafy
import sys

#List for logging required printed strings
myPrintLogs=[]

def write(text):
    """Overloaded sys.stdout.write function"""
    myPrintLogs.append(text) #Adding text into Logs List
    if len(text) == 0:
        return
    old_sys_write(text + '\n') #Calling the actual method for printing text

old_sys_write=sys.stdout.write 
sys.stdout.write=write

Добавьте свой код загрузки после инициализации. У вас будет весь вывод консоли в спискеmyPrintLogs. Вы должны вызвать метод загрузки в новом потоке, чтобы вы могли отслеживать журналы в основном потоке.

Другие вопросы по тегам