好的高层次Python FTP/HTTP库?
我在找一个好用的高层次的Python FTP客户端/服务器库。我正在做一个项目,这个项目是基于ftplib/urllib/urllib2,最开始只有一个功能,现在已经“演变”成了一个小的http/ftp库,但几乎没有什么是为了后续扩展而设计的。所以现在是时候认真重构一下了,我想直接换成一个库。我最不想处理的就是那些复杂的重试逻辑(比如,重试15次,或者重试到中午12点)。
我们现在面临的问题是,有大约10个不同的grab()
和put()
函数。从美观的角度来看,我宁愿只要一个各自的函数,并且可以选择性地传入参数,比如try_until=datetime(2009, 10, 7, 19)
或者retrys=15
。我们处理的是二进制和文本数据,所以这些函数需要对这两种数据都能比较聪明地处理。而且我们抓取的次数远远多于上传,所以我可以不需要上传的功能。
urlgrabber看起来正是我想要的,但似乎在过去几年没有什么开发,我也不确定它和2.6版本的兼容性如何。有没有人对此有经验?或者有什么看法?
2 个回答
根据你正在编写的应用类型,你可能想考虑一下twisted python,因为它内置了HTTP服务器和客户端的代码。不过,这和标准的程序化Python编程有很大的不同。
twisted的一个大优点是,它可以在后台处理客户端请求,处理重试,并且非常可扩展。
更新
如果你需要一个快速的脚本来与服务器互动,可以看看这个serverfault的回答:https://serverfault.com/questions/66336/script-automation-login-enter-password-run-commands-save-output-locally
它推荐了一个工具expect
Expect是一个用于自动化交互式应用程序的工具,比如telnet、ftp、passwd、fsck、rlogin、tip等。Expect让这些事情变得非常简单。Expect也可以用于测试这些应用程序。而且通过添加Tk,你还可以把交互式应用程序包装在X11图形界面中。
Expect可以轻松完成各种任务,这些任务用其他工具做起来会非常困难。你会发现Expect是一个绝对不可或缺的工具——使用它,你将能够自动化一些你之前从未想过的任务,而且你会发现这个自动化过程既快速又简单。
听起来不错!
URLgrabber看起来已经很成熟了,因为它被yum使用(而yum又被很多Unix系统用),所以我觉得它应该非常稳定。Python 2.x基本上是向后兼容的。你可能会遇到一些警告,但我认为在Python 2.6下它应该能正常工作。