"IOError: несоответствие размера в get!"при получении файлов через SFTP - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть скрипт, который я использую для получения определенных файлов через SFTP на регулярной основе.Иногда сценарий выдает ошибку со следующим выводом:

Traceback (most recent call last):
  File "ETL.py", line 304, in <module>
    get_all_files(startdate, enddate, "vma" + 
foldernumber + "/logs/", txtype[1] + single_date2 + ".log", txtype[2] + 
foldernumber + "\\", sftp)
  File "ETL.py", line 283, in get_all_files
    sftp.get(sftp_dir + filename, local_dir + filename)
  File "C:\Python27\lib\site-packages\pysftp\__init__.py", line 249, in get
    self._sftp.get(remotepath, localpath, callback=callback)
  File "C:\Python27\lib\site-packages\paramiko\sftp_client.py", line 806, in get
    "size mismatch in get!  {} != {}".format(s.st_size, size)
IOError: size mismatch in get!  950272 != 1018742

Я просмотрел документацию Paramiko и не вижу объяснения, что может вызвать эту ошибку.Кроме того, код часто успешно работает при последующих попытках или будет успешно выполняться для первых нескольких файлов в диапазоне дат, а затем в процессе загрузки произойдет ошибка во время загрузки всех файлов, которые мне нужно получить.Другие ответы на SO говорят, что это может быть связано с местом на диске, но я попытался очистить папку назначения, но это не помогло.Я пытаюсь загрузить на сетевой диск / облачное хранилище, если это имеет какое-либо значение

Вот функция и код, который я использую для извлечения файлов (через Paramiko):

def get_all_files(start_date, end_date, sftp_dir, filename, local_dir,  \
                sftp_connection):

    sftp.get(sftp_dir + filename, local_dir + filename)

with pysftp.Connection('******.com', username='*****', password='******',  cnopts=cnopts) as sftp:
    get_all_files(startdate, enddate, "vma" + foldernumber + "/logs/", txtype[1] + single_date2 + ".log", txtype[2] + foldernumber + "\\", sftp)

Я хочу, чтобы все загружаемые файлы были получены без этой ошибки.

...