Получить вывод функции в Python в переменной - PullRequest
1 голос
/ 01 апреля 2020
Сценарий

My 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]

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

1 Ответ

0 голосов
/ 01 апреля 2020

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

...