当前位置: 代码迷 >> python >> FTP挂起/ 421超时的Python错误处理
  详细解决方案

FTP挂起/ 421超时的Python错误处理

热度:36   发布时间:2023-06-13 15:09:09.0

我有一个脚本(如下),可将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)

同样,这有95%的时间有效。 如果不是,则在5%的情况下(如果我在挂起时手动中断它,然后再次重新运行该请求),则它会起作用。 这似乎是由服务器临时故障引起的。 我无法控制服务器质量。

真正的问题是挂起时间太长。 我希望能够对它挂起的时间设置一个时限(例如30秒),然后使代码显示“重新运行此ftp命令,直到成功为止”。

那可能吗? 我还有另一种应对方法吗?

谢谢!

通道超时在ftp服务器上设置。 某些接口(例如FileZilla)允许您配置频道超时。 幸运的是,Python的FTP软件包就是其中之一。 有关更多详细信息,请参见 。 同时,只需尝试timeout参数:

ftp = FTP('[FTP ADDRESS HERE]', timeout=30)

Maxim Lott(OP)能够使用以下命令捕获超时错误,该错误会重试连接,直到可以正常工作:

import socket 
except socket.timeout, e:

这个错误让我想了一会儿。

我在无限循环中设置了True

  • 所以当它发生时,它仍然为真

  • 然后调用名为RemoteTar的类中的函数ftp_connect_to_site()

如果发生此异常,则此功能将重新连接您。

是python的初学者,我能想到的一切

          except ftplib.error_temp  as e:
               print('Time run out reconnect: ',e)
               RemoteTar.ftp_connect_to_site()