2009-10-08 7 views
22

WebDAV 서버에서 파일을 업로드하고 조작하는 기능을 응용 프로그램에 구현하고 싶습니다. 원격 파일 작업을위한 os.* 모듈과 비슷한 인터페이스를 제공하는 성숙한 Python 라이브러리를 찾고 있습니다. 인터넷 검색은 파이썬에서 WebDAV에 대한 선택지가 무섭게 나타 났지만 요즘 널리 사용되고있는 것을 알고 싶습니다.WebDAV 용 Python 클라이언트 라이브러리

답변

1

구체적으로 모르겠지만 플랫폼에 따라 파일 시스템을 통해 WebDAV가 제공하는 파일을 마운트하고 액세스하는 것이 더 간단 할 수 있습니다. davfs2이 있으며 Mac OS X과 같은 일부 OS에는 WebDAV 파일 시스템 지원 기능이 내장되어 있습니다.

+0

네, 물론 다른 옵션입니다. 마운트 할 예정이라면 NFS를 사용할 수도 있지만 마운팅은 처음부터 WebDAV를 사용하여 피하려고하는 것입니다. –

+0

마운트 솔루션 +1. 이 문제를 해결하는 유닉스 방식이다. @ 카밀 당신이 WebDAV 라이브러리를 찾기로 결정한 마운트에 대한 당신의 주장은 무엇입니까? –

+1

-1 s3, dav, sshfs 같은 마운트 네트워크 파일 시스템 (NFS/SMB와 비교하여)을 염두에두고 작성된 이러한 사용법은 실제로 문제의 근원이 될 수 없습니다. 일시적인 네트워크 오류는 일반적으로 응용 프로그램에 매우 잘 전달되지 않거나 잠김 현상이 발생합니다. 드라이버 개발자가 예상하지 못한 액세스 패턴은 서버와의 광범위한 핸드 셰이크를 필요로하므로 수용 할 수없는 대기 시간이 발생하고 다른 캐시에서는 불일치가 발생하는 경향이 있습니다. – Juraj

9

내가 비슷한 요구가 있었고, 필자의 필요에 맞게 파이썬 WebDAV 클라이언트를 테스트 해 보았습니다. (WebDAV 서버에서 파일을 업로드하고 다운로드하는 것). 내 경험에 대한 요약은 다음과 같습니다.

1) 나를 위해 일한 것은 python-webdav-lib입니다.

문서는별로 없지만 코드 (특히 예제)를 빠르게 살펴보면 어떻게 작동하는지 알 수 있습니다.

2) PyDAV 0.21 (내가 발견 한 최신 릴리스)은 문자열을 예외로 사용하기 때문에 Python 2.6에서 작동하지 않습니다. 나중에 더 많은 비 호환성을 예상하면서이를 고치려고하지는 않았습니다.

3) davclient 0.2.0. 나는 그것을 보았지만 didn 's는 문서가 내가 찾고있는 API의 수준 (파일 업로드 및 다운로드)을 언급하지 않았기 때문에 더 이상 탐색하지 않았다.

4) Python_WebDAV_Library-0.3.0. 업로드 기능이없는 것 같습니다.

+1

분석을 위해, 아마도 몇 가지가 sice를 바꿨습니다 - 1) python-webdav-lib와 Python_WebDAV_Library-0.3.0은 동일합니다. – mykhal

+2

python-webdav-lib는 위에서 언급 한 것입니다. 저에게 매우 잘 맞았으며 훨씬 더 유용했습니다. 받아 들인 것보다. –

43

"파이썬 webdav 라이브러리는 사용 하시겠습니까?"라는 질문에 대해서는 한 명 이상의 사람들에게 관련이없는 대답이 허용되었습니다 ("Python webdav library를 사용하지 마십시오"). 글쎄, Stackexchange의 일반적인 문제.

원래 질문 (간단한 API는 "os"모듈과 유사 함)에서 요구 사항을 얻는 사람들에게 실질적인 대답을 찾고, 매우 쉬운 API와 훌륭하고 간단한 구현을 제공하는 easywebdav을 제안 할 수 있습니다. 업로드/다운로드 및 파일/디렉토리 관리 방법이 거의 없습니다. 간단한 구현으로 인해 지금까지 디렉터리 목록을 지원하지 않지만 그 버그는 filed이었으며 작성자가 추가하려고합니다.

+2

https://github.com/amnong/easywebdav/pull/4에서 볼 수 있듯이 디렉토리 목록이 구현되었습니다. – Impiastro

+0

이 라이브러리는 훌륭합니다. 그냥 Mavericks에서 테스트했습니다 : ls, 다운로드, 업로드하고 임의의 get 요청을 보낼 수 있도록 "보내기"개인 기능이 있습니다. 나를위한 작품과 파이썬이야 :) – chrisallick

+1

불행히도 그것은 파이썬 3 지원을 가지고 있지 않으며, 풀 요청은 처리되지 않습니다. 아직도 좋은 대안을 찾고 ... – blootsvoets

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

링크 :

관련 문제