测试是否发生了同步(Python)

测试是否发生了同步(Python),python,python-3.x,Python,Python 3.x,我有swf需要在我无权访问的服务器上同步。我不知道服务器上什么时候发生了这种情况(有一个cron作业应该每15分钟运行一次,但它会间歇性地工作),所以我唯一的选择似乎是猜测和检查(等待15分钟…它更新了吗?等待15分钟…)。更令人烦恼的是,有时需要5分钟才能看到版本是否已更新或是否存在较旧的版本。总的来说,这每周浪费几个小时,如果不是更多的话 我正在寻找Python的一种方法,让我知道本地文件和服务器上的文件是同一个文件 我的(完全未经测试的)计划: def确保同步(url,localfile,

我有swf需要在我无权访问的服务器上同步。我不知道服务器上什么时候发生了这种情况(有一个cron作业应该每15分钟运行一次,但它会间歇性地工作),所以我唯一的选择似乎是猜测和检查(等待15分钟…它更新了吗?等待15分钟…)。更令人烦恼的是,有时需要5分钟才能看到版本是否已更新或是否存在较旧的版本。总的来说,这每周浪费几个小时,如果不是更多的话

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

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

def确保同步(url,localfile,finaldest=None):
urllib.request.urlretrieve(url,)
下载='\n'。加入(文件().readlines())
local='\n'.join(文件(localfile).readlines())
如果finaldest为None:finaldest=url
如果下载==本地:#我相信这会奏效吗?
网络浏览器打开(最终测试)
其他的
时间。睡眠(90)
确保同步(url、localfile、FinalTest)
但是,我忍不住想,一定有更好的办法

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

旁注
不,我无权修理它。我正试图获得它,以便服务器只在HTML中的某个地方输出“同步时间”——甚至在注释中——但我的请求主要落在“这不是优先级”的耳朵上。

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

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


有关发送HEAD请求的信息,请参见示例

明确+1,但这还不够。服务器没有向我提供etag或上次修改的…我会给你答案,因为我没有找到更好的答案。
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)