2011-07-07 37 views
0

我有一些需要在我無法訪問的服務器上同步的swf。我不知道什麼時候這是由服務器上的某些事情發生的(有一個應該每15分鐘運行一次的cron作業,但它可以間歇性地工作),所以我幾乎只有真正的選擇似乎是猜測和檢查(等待15分鐘...有更新嗎?等待15分鐘...)。更令人煩惱的是,有時需要5分鐘才能查看版本是否已更新或是否存在舊版本。總而言之,每週浪費幾個小時,如果不是更多。測試是否發生了同步(Python)

我正在尋找一種方式讓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) 

不過,我不禁想,必須有一個更好的辦法。

真正的問題

有沒有辦法讓Python的容易地檢查遠程服務器上的資源是否是一樣的,如果沒有FTP可用性本地資源? 有沒有更好的方法來完成上述代碼?

附註

不,我沒有權限修復它。我試圖獲得它,以便服務器只是在HTML中的某個地方輸出「同步時間」 - 即使在評論中 - 但我的請求很大程度上落在了「它不是優先事項」的耳朵上。

回答

1

我會建議檢查目標服務器是否支持HEAD請求以及是否設置了etag頭和最後修改頭。

如果是這種情況,您可以做(甚至每隔x秒)一次頭部請求,並將etag與本地文件的md5sum進行比較,如果上次修改時間正確,則您可以看到文件的時間同步。

對於發送HEAD請求,請參閱例如How do you send a HEAD HTTP request in Python 2?

+0

肯定爲+1,但並不足夠。服務器不提供給我etag或最後修改... – cwallenpoole

+0

我會給你答案,因爲我沒有找到更好的答案。 – cwallenpoole

相關問題