我正在使用 python 运行Youtube-dl,这是一个用于从 YouTube 和其他网站下载视频的软件。我专门用它来从 YouTube 视频中下载音频。我可以使用 python 从 YouTube 视频中下载音频,方法是使用 check_output() 执行保存在我的计算机上的 youtube-dl.exe 文件。
下面是我编写的执行 youtube-dl 文件并下载歌曲的方法。它返回一个巨大的文本字符串,它是 youtube-dl 程序的输出。
from subprocess import check_output
#downloads the audio from a song to wherever the python script is
def getSong(songUrl):
return check_output('C:\Users\Ben\Desktop\youtube-dl\youtube-dl.exe --max-quality FORMAT --extract-audio ' + songUrl, shell=True)
当我在 python 中运行这个方法时,它会等待命令完成,然后返回一个包含大量信息的巨大响应。这包括在下载结束时输出的一般信息,但它也(如果通过命令提示符运行)每隔几秒就会给出有关下载进度的信息。问题是,在 python 中运行它时,我会在下载完成后获得所有这些进度信息。
有什么方法可以在 check_output() 方法仍在运行时获取输出?这样我就可以为下载制作一个进度条。
编辑:
更新:下面是我想要工作的当前代码,除了一个小例外......
import subprocess
songUrl = "http://www.youtube.com/watch?v=uO3lN-hugaQ"
process = subprocess.Popen(["C:\Users\Ben\Desktop\youtube-dl\youtube-dl.exe", "--max quality", "FORMAT", "--extract-audio", songUrl], shell=True, stdout = subprocess.PIPE)
for line in iter(process.stdout.readline, b''):
print line,
process.communicate()
当我运行上面的这个新代码时,它将开始逐行打印信息,因为它是在执行的命令中生成的,但是所有关于下载百分比的信息都在最后打印出来。当我尝试在命令提示符下运行相同的命令时,我发现提供有关下载百分比信息的文本实际上每秒左右更改一次,而不是使用更新的信息创建新行,正如我根据输出所怀疑的那样在蟒蛇。你认为有什么办法可以解决这个问题,所以我可以获得进度条所需的信息吗?