2009-10-08 429 views
22

我想在我的應用程序中實現一項功能,該功能可以在WebDAV服務器上上載和操作文件。我正在尋找一個成熟的Python庫,它將提供一個類似於os.*模塊的界面來處理遠程文件。谷歌搜索已經爲Python中的WebDAV選擇了一些選項,但我想知道哪些更廣泛使用這些天。用於WebDAV的Python客戶端庫

回答

1

我不知道任何具體的內容,但根據您的平臺,通過文件系統安裝和訪問WebDAV提供的文件可能會更簡單。這裏有davfs2,一些操作系統,如Mac OS X,內置了WebDAV文件系統支持。

+0

是的,那肯定是另一種選擇。如果我要安裝它,我不妨使用NFS,但安裝是我首先嚐試通過使用WebDAV避免的。 – 2009-10-09 16:45:03

+0

對於安裝解決方案。這是解決這些問題的Unix方法。 @Kamil什麼是你反對安裝的論點,所以你決定找到一個WebDAV庫? – 2009-10-21 11:18:03

+1

-1在安裝網絡文件系統(如s3,dav,sshfs)時,如果沒有考慮到這種用法(與NFS/SMB相比),它們在實踐中是永遠存在的問題的根源。瞬態網絡錯誤通常很少傳遞給應用程序或造成鎖定。驅動程序開發人員無法預見的訪問模式需要與服務器進行大量握手,從而導致不可接受的延遲,而其他方面的緩存往往會導致不一致。 – Juraj 2015-02-09 18:19:01

9

我只是有類似的需求,並最終根據我的需求測試了幾個Python WebDAV客戶端(從WebDAV服務器上傳和下載文件)。這裏是我的經驗總結:

1)爲我工作的那個是python-webdav-lib

沒有太多的文檔,但快速查看代碼(尤其是示例)足以找出如何使它適用於我。

2)PyDAV 0.21(我發現的最新版本)不適用於Python 2.6,因爲它使用字符串作爲例外。我沒有試圖解決這個問題,後來預計會出現進一步的不兼容問題。

3)davclient 0.2.0。我看了一下,但沒有進一步探討,因爲文檔沒有提到我正在尋找的API級別(文件上傳和下載)。

4)Python_WebDAV_Library-0.3.0。似乎沒有任何上傳功能。

+1

thx用於分析,可能有些東西已經改變了sice - 1)python-webdav-lib和Python_WebDAV_Library-0.3.0是相同的 – mykhal 2012-08-07 09:55:23

+2

上面引用的python-webdav-lib - 對我工作得非常好,是一個更好/更有用的答案比接受的要好。 – 2013-09-03 14:25:50

43

對於這個問題(「使用什麼Python webdav庫?」),這確實令人感興趣不止一個人,接受了無關答案(「不要使用Python webdav庫」),這很令人傷心。那麼,Stackexchange上的常見問題。

對於那些尋找真正答案的人來說,在給出原始問題(類似於「os」模塊的簡單API)中的要求之後,我可能會建議easywebdav,它具有非常簡單的API,甚至很好和簡單的實現,提供上傳/下載和少量文件/目錄管理方法。由於實施簡單,迄今爲止不支持目錄列表,但是該錯誤是filed,作者打算添加它。

+2

目錄列表已經實現,你可以看到https://github.com/amnong/easywebdav/pull/4。 – Impiastro 2014-02-07 16:16:04

+0

這個庫很棒。剛剛在小牛隊測試:ls,下載,上傳,甚至有一個「發送」私人功能,所以你可以發送任意獲取請求。適用於我和它的蟒蛇:) – chrisallick 2014-05-12 14:36:23

+1

不幸的是它沒有Python 3的支持,並且不會處理pull請求。仍在尋找一個好的選擇... – blootsvoets 2016-05-26 10:59:55

2
import easywebdav 

webdav = easywebdav.connect(
    host='dav.dumptruck.goldenfrog.com', 
    username='_snip_', 
    port=443, 
    protocol="https", 
    password='_snip_') 

_file = "test.py" 

print webdav.cd("/dav/") 
# print webdav._get_url("") 
# print webdav.ls() 
# print webdav.exists("/dav/test.py") 
# print webdav.exists("ECS.zip") 
# print webdav.download(_file, "./"+_file) 
print webdav.upload("./test.py", "test.py") 
0

安裝:

$ sudo apt-get install libxml2-dev libxslt-dev python-dev 
$ sudo apt-get install libcurl4-openssl-dev python-pycurl 
$ sudo easy_install webdavclient 

實例:

import webdav.client as wc 

options = { 
    'webdav_hostname': "https://webdav.server.ru", 
    'webdav_login': "login", 
    'webdav_password': "password" 
} 

client = wc.Client(options) 

client.check("dir1/file1") 
client.info("dir1/file1") 

files = client.list() 
free_size = client.free() 

client.mkdir("dir1/dir2") 
client.clean("dir1/dir2") 

client.copy(remote_path_from="dir1/file1", remote_path_to="dir2/file1") 
client.move(remote_path_from="dir1/file1", remote_path_to="dir2/file1") 

client.download_sync(remote_path="dir1/file1", local_path="~/Downloads/file1") 
client.upload_sync(remote_path="dir1/file1", local_path="~/Documents/file1") 
client.download_async(remote_path="dir1/file1", local_path="~/Downloads/file1", callback=callback) 
client.upload_async(remote_path="dir1/file1", local_path="~/Documents/file1", callback=callback) 

link = client.publish("dir1/file1") 
client.unpublish("dir1/file1") 

鏈接: