Max*_*ott 2 python ftp error-handling timeout ftplib
我有一个将 html 文件推送到服务器的脚本(如下)。它在 95% 的时间内都有效。但是,大约 5% 的时间,服务器出现故障并且连接尝试挂起。它停止了 15 分钟(900 秒)然后失败。
ftp = FTP('[FTP ADDRESS HERE]')
ftp.login('[USERNAME]','[PASSWORD]')
converted_HTML_string = io.BytesIO(HTML_string)
ftp.storbinary('STOR public_html/home.html', converted_HTML_string)
Run Code Online (Sandbox Code Playgroud)
同样,这在 95% 的情况下都有效。在 5% 的情况下,如果我在它挂起时手动中断它并再次重新运行请求 - 那么它就可以工作了。这似乎是由临时服务器故障引起的。我无法控制服务器质量。
真正的问题是挂起太长了。我希望能够为挂起的时间设置时间限制(如 30 秒),然后让代码显示“重新运行此 ftp 命令直到成功”。
那可能吗?我应该用另一种方法来处理这个问题吗?
谢谢!
通道超时在 ftp 服务器上设置。某些接口(例如 FileZilla)允许您配置通道超时。幸运的是,Python 的 FTP 包就是其中之一。有关更多详细信息,请参阅文档。同时,只需尝试超时参数:
ftp = FTP('[FTP ADDRESS HERE]', timeout=30)
Run Code Online (Sandbox Code Playgroud)
Maxim Lott (OP) 能够通过以下方式捕获超时错误,它会重新尝试连接,直到它工作为止:
import socket
except socket.timeout, e:
Run Code Online (Sandbox Code Playgroud)