用于WebDAV的Python客户端库

用于WebDAV的Python客户端库,python,client,webdav,Python,Client,Webdav,我想在我的应用程序中实现一项功能,在WebDAV服务器上上载和操作文件。我正在寻找一个成熟的Python库,它将提供一个类似于os.*模块的接口,用于处理远程文件。谷歌已经在Python中为WebDAV提供了一些选项,但我想知道哪些选项在最近得到了更广泛的使用 我不知道有什么特别的方法,但是,根据您的平台,通过文件系统装载和访问WebDAV服务的文件可能更简单。还有一些操作系统,比如Mac OS X,内置了WebDAV文件系统支持。我对这些库都没有经验,但是Python包索引(“PyPi”)。显

我想在我的应用程序中实现一项功能,在WebDAV服务器上上载和操作文件。我正在寻找一个成熟的Python库,它将提供一个类似于
os.*
模块的接口,用于处理远程文件。谷歌已经在Python中为WebDAV提供了一些选项,但我想知道哪些选项在最近得到了更广泛的使用

我不知道有什么特别的方法,但是,根据您的平台,通过文件系统装载和访问WebDAV服务的文件可能更简单。还有一些操作系统,比如Mac OS X,内置了WebDAV文件系统支持。

我对这些库都没有经验,但是Python包索引(“PyPi”)。

显然你在寻找WebDAV客户端库

我不确定这数百万次点击是如何产生的,似乎以下2项看起来很相关:

  • PyDAV:
  • Zope-并查找client.py

我也有类似的需求,最后测试了一些Python WebDAV客户端以满足我的需求(从WebDAV服务器上传和下载文件)。以下是我的经验总结:

1) 对我有用的是

没有太多的文档,但是快速查看一下代码(尤其是示例)就足以了解如何让它为我工作

2) PyDAV 0.21(我发现的最新版本)不适用于Python2.6,因为它使用字符串作为例外。我没有试图解决这个问题,希望以后会出现更多的不兼容

3) 。我看了一下,但没有进一步探究,因为文档中没有提到我想要的API级别(文件上传和下载)


4) 。似乎没有任何上传功能。

对于这个问题(“使用什么Python webdav库?”)(当然不止一个人对此感兴趣),令人遗憾的是,不相关的答案被接受(“不要使用Python webdav库”)。Stackexchange上的常见问题

对于那些想要寻找真正答案的人,并且考虑到原始问题中的要求(类似于“os”模块的简单API),我可能会建议,它有非常简单的API,甚至是漂亮简单的实现,提供上传/下载和很少的文件/目录管理方法。由于实现简单,目前为止它还不支持目录列表,但它的错误是,作者打算添加它。

安装:

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")
$ 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")
链接:

  • 源代码
  • 小包

是的,这当然是另一种选择。如果我要挂载它,我也可以使用NFS,但挂载是我最初使用WebDAV试图避免的。挂载解决方案+1。这是Unix解决此类问题的方法@Kamil您反对挂载的理由是什么,所以您决定寻找WebDAV库?-1挂载网络文件系统(如s3、dav、sshfs)时没有考虑到这种用法(与NFS/SMB相比),在实践中永远不会出现问题。瞬时网络错误通常与应用程序的通信非常差,或导致锁定。驱动程序开发人员无法预见的访问模式需要与服务器进行大量握手,因此延迟不可接受,另一端的缓存往往会导致不一致。thx用于分析,可能有些事情已经改变了sice-1)python webdav库和python_webdav_库-0.3.0是相同的上面提到的python webdav库-对我来说非常好,是一个比公认的答案更好/更有用的答案。目录列表已经实现,如您所见。这个库工作得非常好。刚刚在Mavericks上测试过:ls、download、upload,甚至还有一个“send”私有函数,您可以发送任意get请求。对我来说是可行的,它是python:)不幸的是,它没有Python3支持,拉请求也没有得到处理。仍在寻找一个好的替代方案……不幸的是,自2014年以来,该方案再也没有更新过。