尝试使用 Python SFTP 文件时定义传输模式

2024-01-21

我们正在尝试使用 python 脚本(驻留在 SFTP 服务器上)将文本文件从 Linux 服务器传输到 Windows 服务器。

我们有必要确保文件使用文本模式传输。我没有看到这种可能性pysftp。还有其他Python库支持这个吗?


pysftp/Paramiko 使用 SFTP 协议版本 3。

在SFTP协议版本3中,没有传输模式。或者换句话说,只有binary传输模式。

即使 pysftp/Paramiko 支持较新版本的 SFTP(支持文本/ascii 模式),它也不太可能对您有帮助。大多数 SFTP 服务器都是 OpenSSH。 OpenSSH 也使用 SFTP 3。

也可以看看如何在SFTP中传输二进制文件? https://stackoverflow.com/q/29226647/850848


如果您需要将文件转换为 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)

(转换基于如何在 Windows 机器上用 Python 将 CRLF 转换为 LF https://stackoverflow.com/q/36422107/850848)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试使用 Python SFTP 文件时定义传输模式 的相关文章

随机推荐