尽管文件上传完成,ftps.storlines socket.timeout [英] ftps.storlines socket.timeout despite file upload completing

查看:29
本文介绍了尽管文件上传完成,ftps.storlines socket.timeout的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 ftplib.FTP_TLS 上传 CSV 文件,但是无论我设置的超时持续时间(5、10、60 秒)如何,代码总是超时并出现错误:

I'm trying to upload a CSV file using ftplib.FTP_TLS, however regardless of the timeout duration I set (5,10,60 seconds), the code always times out with the error:

File "/usr/lib/python3.4/ftplib.py", line 544, in storlines
  conn.unwrap()
File "/usr/lib/python3.4/ssl.py", line 788, in unwrap
  s = self._sslobj.shutdown()
socket.timeout: The read operation timed out

但是超时后,我通过Cyber​​duck查看目录,CSV文件在那里,完成.

However after the timeout, I check the directory through Cyberduck, and the CSV file is there, complete.

这是我的上传代码:

def upload_csv(filename):
    with FTP_TLS(timeout=5) as ftps:
        ftps.set_pasv(True)
        ftps.connect(ftps_server,ftps_port)
        ftps.login(ftps_username, ftps_password)
        ftps.prot_p()
        ftps.cwd('sales')
        ftps.storlines("STOR " + filename, open(filename,'rb'))

我也试过 storbinary(...) 但得到同样的错误.

I've also tried storbinary(...) but get the same error.

该文件肯定存在,并且确实是在服务器上完整创建的.ssl.py 中的 .shutdown() 似乎有问题,可能正在等待最终读取,但互联网似乎没有产生解决方案.

The file definitely exists, and does actually get created on the server in its entirety. It looks like it's a problem with .shutdown() in ssl.py maybe waiting for a final read, but the internet doesn't seem to yield a solution.

有人可以帮忙吗?

推荐答案

我能够通过覆盖来克服这个问题

I was able to overcome the problem by overwriting

ftplib._SSLSocket = None

这里有一个更完整的例子:

Here a more complete example:

def transfer_zip(dest_zipfile, host, host_path, user, password):
    os.chdir(dirname(dest_zipfile))
    with ftplib.FTP_TLS(host, timeout=10) as ftp:
        ftp.login(user, password)
        ftp.prot_p()
        ftp.cwd(host_path)
        ftplib._SSLSocket = None
        ftp.storbinary(f"STOR {basename(dest_zipfile)}", open(dest_zipfile, 'rb'))
        ftp.quit()
        ftp.close()

这篇关于尽管文件上传完成,ftps.storlines socket.timeout的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆