【问题标题】:How to print a string while a download is happening?下载时如何打印字符串?
【发布时间】:2022-02-06 15:18:53
【问题描述】:

我希望 Python 在进程发生时打印出字符串,例如下面脚本中的下载。不过,我觉得很难。例如,也许我希望 Python 在下载 10 秒后说:“嘿,已经 10 秒了。”我只能将开始时间放在进程之前,而将结束时间放在进程之后,这意味着我无法在下载过程中进行跟踪。

import requests, re, time

link = "https://web.archive.org/cdx/search/cdx?url=twitter.com/realdonaldtrump/status&matchType=prefix&filter=statuscode:200"

response = requests.head(link).text
urls = re.findall(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', response)
for url in urls:
    start = time.time()
    data2.append(f"{url}")
    end = time.time()
    time_elapsed = end - start
    if time_elapsed >= 10:
        print("It's been 10 seconds.")

【问题讨论】:

标签: python time python-requests


【解决方案1】:

你可以使用进度条:

  1. 使用progressbar模块
import progressbar
from time import sleep
bar = progressbar.ProgressBar(maxval=20, \
    widgets=[progressbar.Bar('=', '[', ']'), ' ', progressbar.Percentage()])
bar.start()
for i in xrange(20):
    bar.update(i+1)
    sleep(0.1)
bar.finish()
def print_progress_bar(total, current, barsize=60):
    progress = int(current*barsize/total)
    completed = str(int(current*100/total)) + '%'
    print('[', chr(9608)*progress, ' ', completed, '.'*(barsize-progress), '] ', str(i)+'/'+str(total), sep='', end='\r', flush=True)

示例:

total = 6000
barsize = 60
print_frequency = max(min(total//barsize, 100), 1)
print("Start Task..", flush=True)
for i in range(1, total+1):
  if i%print_frequency == 0 or i == 1:
    print_progress_bar(total, i, barsize)
print("\nFinished", flush=True)

【讨论】:

    猜你喜欢
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    相关资源
    最近更新 更多