繁体   English   中英

Python重复urllib请求

[英]Python repeating urllib request

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

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()工作方式有关。

turtle.done()永远不会被调用,因为你永远不会离开循环,你应该在每次循环迭代之后渲染它

我对此进行了测试(声音除外)并发现了一个问题——海龟缓存图像,因此对新图像使用相同的文件名是行不通的! 我们可以用代码修复这个问题,在下载后用计数器重命名文件,以及文件清理。 或者我们可以在幕后操作海龟的图像缓存:

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM