【问题标题】:Python client library for WebDAVWebDAV 的 Python 客户端库
【发布时间】:2010-12-05 02:13:56
【问题描述】:

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

【问题讨论】:

  • 因为这个问题的答案已经非常过时了。我启动了this Q/A,它应该作为当前 Python WebDAV 客户端的社区 wiki。

标签: python client webdav


【解决方案1】:

我不知道具体的,但根据您的平台,通过文件系统挂载和访问 WebDAV 提供的文件可能更简单。有 davfs2 和一些操作系统,比如 Mac OS X,内置了 WebDAV 文件系统支持。

【讨论】:

  • 是的,这当然是另一种选择。如果我要挂载它,我还不如使用 NFS,但挂载是我试图通过首先使用 WebDAV 来避免的。
  • +1 用于安装解决方案。这是解决此类问题的 Unix 方式。 @Kamil 你反对安装的理由是什么,所以你决定找到一个 WebDAV 库?
  • -1 挂载网络文件系统,如 s3、dav、sshfs,但在实践中没有考虑到这种用法(与 NFS/SMB 相比)是永无止境的问题来源。瞬态网络错误通常很难传达给应用程序或导致锁定。驱动程序开发人员无法预见的访问模式需要与服务器进行大量握手,因此延迟不可接受,另一方面缓存往往会导致不一致。
【解决方案2】:

我没有使用任何这些库的经验,但 Python 包索引(“PyPi”)lists quite a few webdav modules

【讨论】:

    【解决方案3】:

    显然您正在寻找 WebDAV 客户端库。

    不知道为什么会出现如此多的点击量,似乎以下 2 个看起来相关:

    【讨论】:

      【解决方案4】:

      我刚刚有类似的需求,并最终测试了一些 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) python-webdav-lib 和 Python_WebDAV_Library-0.3.0 是相同的
      • python-webdav-lib 上面引用的 - 对我来说效果很好,是一个比公认的更好/更有用的答案。
      【解决方案5】:

      很遗憾,对于这个肯定不止一个人感兴趣的问题(“使用什么 Python webdav 库?”),接受了不相关的答案(“不要使用 Python webdav 库”)。好吧,Stackexchange 上的常见问题。

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

      【讨论】:

      • 目录列表已经实现,如您所见github.com/amnong/easywebdav/pull/4
      • 这个库很好用。刚刚在 Mavericks 上测试过:ls、下载、上传,甚至还有一个“发送”私有函数,因此您可以发送任意获取请求。对我有用,它是 python :)
      • 不幸的是,它不支持 Python 3,并且拉取请求没有得到处理。仍在寻找一个好的选择...
      • 很遗憾,自 2014 年以来就没有再更新了。
      • 这是 2012 年的一个很好的答案。为了获得关于 stackoverflow 的最新信息,我创建了这个关于 easywebdavcommunity wiki answer
      【解决方案6】:
      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")
      

      【讨论】:

        【解决方案7】:

        安装:

        $ 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")
        

        链接:

        【讨论】:

          猜你喜欢
          • 2010-10-14
          • 2011-03-23
          • 2012-04-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-01
          相关资源
          最近更新 更多