Получить вывод функции в 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
. Вы должны вызвать метод загрузки в новом потоке, чтобы вы могли отслеживать журналы в основном потоке.