ftps.storlines socket.timeout尽管文件上传完成
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ftps.storlines socket.timeout尽管文件上传完成相关的知识,希望对你有一定的参考价值。
我正在尝试使用ftplib.FTP_TLS上传CSV文件,但无论我设置的超时持续时间(5,10,60秒),代码总是超时并出现错误:
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
但是在超时后,我通过Cyberduck检查目录,然后CSV文件就完成了。
这是我的上传代码:
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(...)但得到同样的错误。
编辑:文件肯定存在,并且实际上完全在服务器上创建。看起来ssl.py中的.shutdown()可能等待最终读取是一个问题,但互联网似乎没有产生解决方案。
有人可以放任何光吗?
答案
我能够通过覆盖来克服这个问题
ftplib._SSLSocket = None
这是一个更完整的例子:
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尽管文件上传完成的主要内容,如果未能解决你的问题,请参考以下文章