linux - Paramiko sftp put 请求在 python 中被 EOFError() 终止

标签 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 秒内完成。我在这里错过了什么?是请求超时的大小还是其他原因。

最佳答案

看来我在我的 Linux 服务器上使用的是旧版本的 paramiko。我升级它使用,

 pip install --upgraded paramiko

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

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

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

关于linux - Paramiko sftp put 请求在 python 中被 EOFError() 终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50588450/

相关文章:

security - 如何在 JCL FTP 中保护存储密码?

linux - 如何将当前正在运行的 linux 进程置于后台?

python - 如何在 Python 2.7 中创建 Lambda 函数来创建、重新启动、删除、修改 ElastiCache Redis?

Python 图像库无法抓取整个屏幕

java - 通过多个连接同时从 FTP 服务器下载同一文件的不同部分

java - Chilkat - CFtp2 - Java - 当凭据(用户名/密码)为日语/韩语/阿拉伯语时登录失败

linux - 如何使用鼠标滚轮在 tmux 面板中启用滚动?

linux - 在 Debian Wheezy 上升级 GLIBC

linux - Linux 上的时间虚拟化

python - 盒中的许多粒子 - 物理模拟