Определите режим передачи при попытке SFTP-файлов с помощью Python - PullRequest
1 голос
/ 25 сентября 2019

Мы пытаемся перенести текстовые файлы с сервера Linux на сервер Windows с помощью скрипта Python (который находится на сервере SFTP).

Нам необходимо обеспечить передачу файлов в текстовом режиме.Я не вижу такой возможности в pysftp.Есть ли другая библиотека Python, которая поддерживает это?

1 Ответ

1 голос
/ 25 сентября 2019

pysftp / Paramiko использует протокол SFTP версии 3.

В протоколе SFTP версии 3 режимы передачи отсутствуют.Или, другими словами, существует только режим передачи binary .

Даже если pysftp / Paramiko поддерживает более новую версию SFTP, которая поддерживает режим text / ascii, маловероятно, чтопомочь тебе.Большинство SFTP-серверов являются OpenSSH.И OpenSSH также использует SFTP 3.

См. Также Как передать двоичный файл в SFTP?


Если вам нужно преобразовать файл в формат Windows, вынужно сделать это заранее, перед передачей файла.

Наивная реализация будет выглядеть так:

WINDOWS_LINE_ENDING = b'\r\n'
UNIX_LINE_ENDING = b'\n'

with open("/local/path/file.txt", "rb") as local_file:
    contents = local_file.read()
    contents = contents.replace(UNIX_LINE_ENDING, WINDOWS_LINE_ENDING)
    with sftp.open("/remote/path/file.txt", "wb") as remote_file:
        remote_file.write(contents)

(преобразование на основе Как преобразовать CRLF в LF на компьютере с Windowsв Python )

...