Python重复urllib请求

时间:2019-07-03 07:50:55

标签: python urllib turtle-graphics

我有这个愚蠢的程序,它可以检索随机的猫图像并播放喵声:

import urllib.request
import turtle
import time
import playsound

screen = turtle.Screen()

url = 'https://cataas.com/cat/gif'
filename = "random-cat.gif"
urllib.request.urlretrieve(url, filename)

screen.bgpic('random-cat.gif')

playsound.playsound('meow.mp3', True)

turtle.done()

但是,如果我想在一个循环中重复执行该代码,并且有时间延迟,则图像根本不会显示:

screen = turtle.Screen()

while True:
    url = 'https://cataas.com/cat/gif'
    filename = "random-cat.gif"
    urllib.request.urlretrieve(url, filename)

    screen.bgpic('random-cat.gif')

    playsound.playsound('meow.mp3', True)

    time.sleep(5)

turtle.done()

有人可以解释这是为什么以及如何解决吗?我认为这可能与time.sleep()的工作方式有关。

2 个答案:

答案 0 :(得分:0)

turtle.done()永远不会被调用,因为您永远不会退出循环,应该渲染它,并且在每次循环迭代之后

答案 1 :(得分:0)

我对此进行了测试(声音除外),发现一个问题-乌龟缓存图片,因此将相同文件名与新图片一起使用将不起作用!我们可以使用代码修复此问题,以在下载带有计数器的文件后对文件进行重命名,以及清除文件。或者我们可以在后台操纵乌龟的图像缓存:

import urllib.request
import turtle
import playsound

url = 'https://cataas.com/cat/gif'
filename = 'random-cat.gif'
sound = 'meow.mp3'

def meow():
    urllib.request.urlretrieve(url, filename)

    if screen.bgpic() == filename:
        screen._bgpics[filename] = screen._image(filename)

    screen.bgpic(filename)

    playsound.playsound(sound, True)

    screen.ontimer(meow, 5000)

screen = turtle.Screen()

meow()

turtle.done()