gpt4 book ai didi

python:在命令完成之前从 check_output 获取响应

转载 作者:行者123 更新时间:2023-11-30 23:23:14 24 4
gpt4 key购买 nike

我正在使用python来运行Youtube-dl ,一款用于从 YouTube 和其他网站下载视频的软件。我专门用它从 YouTube 视频下载音频。我可以通过使用 check_output() 执行保存在我的计算机上的 youtube-dl.exe 文件,使用 python 从 YouTube 视频下载音频。

下面是我编写的用于执行 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()

当我运行上面的新代码时,它将开始逐行打印在执行的命令中生成的信息,但所有有关下载百分比的信息都会在最后打印出来。当我尝试在命令提示符中运行相同的命令时,我发现提供有关下载百分比信息的文本实际上每秒左右都会更改,而不是使用更新的信息创建新行,正如我根据输出怀疑的那样在Python中。您认为有什么办法可以解决这个问题,以便我可以获得进度条所需的信息吗?

最佳答案

请改用 Popen。然后你可以执行如下操作:

import subprocess
process = subprocess.Popen(["C:\Users\Ben\Desktop\youtube-dl\youtube-dl.exe", "--max-quality", "FORMAT", "--extract-audio", "songUrl"], shell=True, stdout = subprocess.PIPE)

while process.poll() is None:
result = process.stdout.read()
# do some calculations for percentage done

作为一般经验法则,您应该避免使用 shell=True 来防止潜在的安全漏洞。

关于python:在命令完成之前从 check_output 获取响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24069902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com