Метод paramiko put выдает «[Errno 2] File not found», если на SFTP-сервере есть триггер для автоматического перемещения файла при загрузке - PullRequest
1 голос
/ 07 января 2020

Я вызываю метод Paramiko sftp_client.put(locapath,remotepath)

Это вызывает ошибку [Errno 2] Файл не найден ниже.

01/07/2020 01:12:03 PM - ERROR - [Errno 2] File not found
Traceback (most recent call last):
  File "file_transfer\TransferFiles.py", line 123, in main
  File "paramiko\sftp_client.py", line 727, in put
  File "paramiko\sftp_client.py", line 689, in putfo
  File "paramiko\sftp_client.py", line 460, in stat
  File "paramiko\sftp_client.py", line 780, in _request
  File "paramiko\sftp_client.py", line 832, in _read_response
  File "paramiko\sftp_client.py", line 861, in _convert_status

Попробовав множество других рекомендуемых исправлений, я обнаружил, что ошибка связана с тем, что на сервере имеется автоматический триггер c для немедленного перемещения файла в другое место после загрузки файла.

Я не видел ни одного поста, касающегося этой проблемы, и хотел узнать, не исправил ли кто-либо еще это, поскольку SFTP-сервер принадлежит третьей стороне и не желает изменять атрибуты триггера.

Файл на самом деле загружается правильно, так что я могу перехватить исключение и проигнорировать ошибку. Но я бы предпочел справиться с этим, если это возможно.

1 Ответ

0 голосов
/ 07 января 2020

Paramiko по умолчанию проверяет размер загруженного файла после загрузки.

Если файл удаляется сразу после загрузки, проверка не проходит.

Чтобы избежать проверки, установите confirm параметр от SFTPClient.put до False.

sftp_client.put(localpath, remotepath, confirm=False)

Я считаю, что проверка все равно избыточна, см.
Как выполнить контрольные суммы во время SFTP-файла передача для целостности данных?


По аналогичному вопросу о pysftp (что такое обертка вокруг Paramiko) см .:
Python pysftp.put поднимает "Нет такого файл "исключение, хотя файл загружен

...