【问题标题】:How do I add a progress bar to my pytube code如何在我的 pytube 代码中添加进度条
【发布时间】:2019-04-17 20:50:03
【问题描述】:

我有一个可以工作的 pytube 脚本,但是我在为创建进度条的额外代码应该去哪里而苦苦挣扎。

#! usr/bin/python3

import sys
from pytube import YouTube

if len(sys.argv) < 2:
    print('Argument 1 must be the YouTube URL. Argument 2 must be a location to save it.')

yt = YouTube(sys.argv[1])

print()
print("Knocking on YouTube's Door....")
print(f'Downloading: {yt.title}')
print()

yt = YouTube(sys.argv[1]).streams.first().download(sys.argv[2])

print('Download Complete!')

【问题讨论】:

    标签: python-3.x pytube


    【解决方案1】:

    您应该在您的 YouTube 对象上调用 register_on_progress_callback(func),其中 func 是一个函数,它接受 streamchunkfile_handlebytes_remaining 作为参数。对于您的代码,它将是:

    def on_progress(stream, chunk, file_handle, bytes_remaining):
        total_size = stream.filesize
        bytes_downloaded = total_size - bytes_remaining 
        percentage_of_completion = bytes_downloaded / total_size * 100
    
    yt.register_on_progress_callback(on_progress)
    

    那你得用percentage_of_completion变量来画进度条,不过有点超出了本题的范围。请记住,每次下载块时都会调用on_progress 函数。我希望现在你能做出你想要的。

    【讨论】:

    • 感谢您的提示...我认为这就是我必须做的,但我不确定将代码放在哪里以及在哪里调用函数...
    • @a5pire 您可以在下载前添加调用它。
    • 再一次,这就是我的想法,但是当我运行代码时,文件仍然下载但没有进度条的迹象。我错过了什么?
    • 你检查过on_progress函数是否被调用了吗?
    • 我已经把它排序了——在你上面的代码中没有打印功能,所以没有任何东西打印到屏幕上......我在你的函数 print(percentage_of_completion) 中添加了最后一行谢谢:)
    【解决方案2】:

    我只用了几行代码就成功地制作了一个漂亮而简单的进度功能:

    def progress_func(stream, chunk, bytes_remaining):
        curr = stream.filesize - bytes_remaining
        done = int(50 * curr / stream.filesize)
        sys.stdout.write("\r[{}{}] ".format('=' * done, ' ' * (50-done)) )
        sys.stdout.flush()
    

    然后在创建YouTube对象的时候使用这个函数

    YouTube(url, on_progress_callback=progress_func)
    

    这样,我们会得到一个类似下图的进度条,填满

    [===================================               ]
    

    【讨论】:

      猜你喜欢
      • 2020-10-03
      • 2019-12-05
      • 2019-10-05
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      相关资源
      最近更新 更多