在变量中获取Python函数的输出

在变量中获取Python函数的输出,python,eel,Python,Eel,我的python脚本使用youtube dl库下载youtube视频。它只打印进度,不返回进度值。我必须把进度加到我的HTML页面上。使用return()只能将代码设置为0或无。JavaScript被配置为获取返回值并将其添加到textarea。无法配置库,因为它很大 stream.download(quiet=False, filepath=outfilepath) 这将调用模块pafy,该模块进一步调用youtube dl 16,498,967.0 Bytes [100.00%] rec

我的python脚本使用youtube dl库下载youtube视频。它只打印进度,不返回进度值。我必须把进度加到我的HTML页面上。使用return()只能将代码设置为0或无。JavaScript被配置为获取返回值并将其添加到textarea。无法配置库,因为它很大

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页面中获得此输出?

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

是否尝试重载打印函数以存储结果?请解释一下?我不知道重载打印功能。由于打印通常使用标准输出,这可能有助于修改打印行为@Hamza Kurshid
Error-return(“最新进展:”,myPrintLogs[-1])indexer:list index out-range
@BhavyaGupta请确保在定义其他方法之前先定义该方法。然后在确定所需的打印语句已执行后,访问列表myPrintLogs。是的,我是按照正确的方式执行的。它仍然是空白的。我的脚本中没有给出打印命令。它源于某些导入的模块。模块
pafy
在其实现中不使用
print
。它使用
sys.stdout.write
。所以我更新了代码来替代这个方法。你可以试试这个!你太棒了!它很有魅力。但是现在,我遇到了来自python的SSL错误。你也能帮我吗?