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