测试同步是否已经发生(Python)

时间:2011-07-07 14:30:51

标签: python python-3.x

我有swf需要在我无法访问的服务器上同步。我无法知道服务器上发生了什么事情(有一个应该每15分钟运行一次的cron作业,但它可以间歇性地工作),所以我的唯一真实选择似乎是猜测和检查(等15分钟......有更新吗?等十五分钟......)。另一个令人烦恼的是,有时需要5分钟才能看到版本是否已更新或是否有旧版本。总而言之,如果不是更多,每周浪费几个小时。

我正在寻找一种方法让Python知道本地文件和服务器上的文件是同一个文件。

我的(完全未经测试的)计划:

def ensureSynced(url,localfile,finaldest = None):
    urllib.request.urlretrieve(url,<download-file>)
    downloaded = '\n'.join(file(<download-file>).readlines())
    local      = '\n'.join(file(localfile).readlines())
    if finaldest is None: finaldest  = url
    if downloaded == local: # I believe this will work?
        webbrowser.open(finaldest)
    else
        time.sleep(90)
        ensureSynced(url,localfile,finaldest)

但是,我不禁想到必须有更好的方法。

真正的问题

如果没有FTP可用性,有没有办法让Python轻松检查远程服务器上的资源是否与本地资源相同? OR 有没有更好的方法来完成上述代码?

旁注

不,我无权修复它。我试图得到它,以便服务器只是在HTML中的某个地方输出“sync-time” - 即使是在评论中 - 但我的请求在很大程度上依赖于“它不是优先级”的耳朵。

1 个答案:

答案 0 :(得分:1)

我建议检查目标服务器是否支持HEAD请求以及是否设置了etag标头和最后修改的标头。

如果是这种情况,您可以(甚至每x秒)执行一次头部请求,并将etag与本地文件的md5sum进行比较,如果上次修改时间正确,则可以看到文件同步的时间

有关发送HEAD请求的信息,请参阅示例How do you send a HEAD HTTP request in Python 2?