Paramiko sftp在python中使用EOFError()终止请求

时间:2018-05-29 15:56:27

标签: linux python-2.7 ftp sftp paramiko

我正在尝试使用python的sftp模块'Paramiko'上传几个大小介于20到30 MB之间的.zip文件。我能够成功连接到sftp服务器,并且还能够列出目标目录中的内容。但是在尝试从我的ec2 linux机器上传文件时,请求花费了太多时间,然后终止于EOFError()。以下是代码,

>>> import paramiko
>>> import os
>>> ftp_host='*****'
>>> ftp_username='***'
>>> ftp_password='**'
>>> ssh_client=paramiko.SSHClient()
>>> ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> ssh_client.connect(hostname=ftp_host,username=ftp_username,password=ftp_password, timeout=500)
>>> ftp_client=ssh_client.open_sftp()
>>> ftp_client.chdir('/inbound/')
>>> ftp_client.listdir()
[u't5-file-1.zip', u'edp_r.zip', u'T5_Transaction_Sample.gz']
>>> ftp_client.put("/path-to-zip-files-on-local/edp_revenue.zip","/inbound/edp_revenue.zip")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/paramiko/sftp_client.py", line 669, in put
    return self.putfo(fl, remotepath, file_size, callback, confirm)
  File "/usr/lib/python2.7/dist-packages/paramiko/sftp_client.py", line 626, in putfo
    fr.write(data)
  File "/usr/lib/python2.7/dist-packages/paramiko/file.py", line 331, in write
    self._write_all(data)
  File "/usr/lib/python2.7/dist-packages/paramiko/file.py", line 448, in _write_all
    count = self._write(data)
  File "/usr/lib/python2.7/dist-packages/paramiko/sftp_file.py", line 176, in _write
    self._reqs.append(self.sftp._async_request(type(None), CMD_WRITE, self.handle, long(self._realpos), data[:chunk]))
  File "/usr/lib/python2.7/dist-packages/paramiko/sftp_client.py", line 750, in _async_request
    self._send_packet(t, msg)
  File "/usr/lib/python2.7/dist-packages/paramiko/sftp.py", line 170, in _send_packet
    self._write_all(out)
  File "/usr/lib/python2.7/dist-packages/paramiko/sftp.py", line 135, in _write_all
    raise EOFError()
EOFError

当我使用curl命令尝试同样的事情时,我很容易就能在20秒内完成。我在这里错过了什么?这是要求超时或其他任何东西的大小。

1 个答案:

答案 0 :(得分:0)

似乎我在我的linux服务器上使用旧版本的paramiko。我用它升级了它,

 pip install --upgraded paramiko

然后将所有内容记录在日志文件中,

paramiko.util.log_to_file('/path_to_log_file/paramiko.log')

只是为了捕捉每一个细节。现在它似乎工作非常快速和正确。