【问题标题】:How to deal with new line characters in Windows vs Unix in Python Paramiko如何在 Python Paramiko 中处理 Windows 与 Unix 中的换行符
【发布时间】:2017-12-07 21:17:03
【问题描述】:

目前我正在执行以下任务。

  1. 在 Windows 中使用 Python 创建一个小文件
  2. 使用 Paramiko Python 库 SFTP 模块将此文件传输到远程 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 机器有问题:(

【问题讨论】:

    标签: python ssh sftp paramiko


    【解决方案1】:

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

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

    Define transfer mode when trying to SFTP files using Python

    【讨论】:

    • 谢谢@Martin,我接受这个回答我的问题。我了解到 Winscp 能够进行转换,因为它具有文本传输选项,而 paramiko 仅具有二进制传输。
    猜你喜欢
    • 2018-01-16
    • 2010-10-17
    • 2023-04-04
    • 2017-07-09
    • 1970-01-01
    • 2022-01-20
    • 2011-06-03
    • 1970-01-01
    • 2011-02-06
    相关资源
    最近更新 更多