Paramiko sftp помещает запрос, завершаемый с помощью EOFError () в python - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь загрузить пару файлов .zip размером от 20 до 30 МБ, используя sftp-модуль Python 'Paramiko'.Я могу успешно подключиться к серверу 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 голосов
/ 30 мая 2018

Кажется, я использовал более старую версию paramiko на моем сервере Linux.Я обновил его, используя

 pip install --upgraded paramiko

, а затем записал все в файл журнала,

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

, чтобы зафиксировать каждую деталь.Теперь он работает довольно быстро и правильно.

...