首页 > 解决方案 > 在变量中获取 Python 中函数的输出

问题描述

我的 python 脚本使用 youtube-dl 库下载 youtube 视频。它只打印进度,不返回进度值。我必须将进度泵入我的 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 shell 中打印。如何在我的 HTML 页面中获取此输出?

标签: pythoneel

解决方案


一种可能的解决方案是覆盖用于打印到控制台的内置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。您应该在新线程中调用下载方法,以便您可以监控主线程中的日志。


推荐阅读