Как работать с символами новой строки в Windows и Unix в Python Paramiko

В настоящее время я выполняю задачу ниже.

  1. Создайте небольшой файл в Windows с помощью Python
  2. Перенесите этот файл в удаленную среду Unix с помощью модуля SFTP библиотеки Paramiko Python.

Столкнулся с проблемой:

Новая строка, созданная в Windows, неправильно преобразуется в символ новой строки Unix во время передачи. Я вижу ^M символов внутри файла на моем удаленном хосте.

Любая идея или предложение, как я могу избавиться от этого поведения.

Когда я делаю передачу того же файла с помощью WinSCP, я не сталкиваюсь с этой проблемой. Я предполагаю, что WinSCP имеет встроенную возможность справиться с этим.

Используемая версия Python 3.5.

Шаг 1:

with open(myNewFile.txt,'w') as fileToUpload:
    fileToUpload.write('MyOwnTxt'+'\n')

Шаг 2:

COMP = remoteServerHost
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(COMP, username=user, password=password, allow_agent = False)
src = myNewFile.txt
dst = "/remotePath/myNewFile.txt"
ftp = ssh.open_sftp()
ftp.put(src , dst)
ftp.close()
ssh.close()

Я немного удивлен, потому что никто не указал эту проблему в SO или любом другом форуме. Так что я чувствую, что на моей машине с Windows что-то не так :(


person just10minutes    schedule 04.07.2017    source источник


Ответы (1)


Paramiko не поддерживает преобразование последовательностей EOL передаваемых файлов.

Вы должны преобразовать содержимое перед его загрузкой.

См. Определение режима передачи при попытке файлов SFTP с помощью Python.

person Martin Prikryl    schedule 07.07.2017
comment
Спасибо @Martin, я принимаю этот ответ на свой вопрос. Я узнал, что Winscp может выполнять преобразование, потому что у него есть возможность передачи текста, тогда как у paramiko есть только двоичная передача. - person just10minutes; 09.07.2017