如何在Python Paramiko中处理Windows vs Unix中的新行字符

时间:2017-07-04 11:53:06

标签: python ssh sftp paramiko

目前我在做以下任务。

  1. 使用python
  2. 在Windows中创建一个小文件
  3. 使用Paramiko python库SFTP模块
  4. 将此文件传输到远程Unix环境

    面临的问题:

    在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机器上有问题:(

    由于

1 个答案:

答案 0 :(得分:1)

Paramiko不支持转换传输文件的EOL序列。

您必须在上传内容之前转换内容。

请参阅How to convert CRLF to LF on a Windows machine in Python