首页 > 解决方案 > 尝试使用 Python 传输 SFTP 文件时定义传输模式

问题描述

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

我们有必要确保使用文本模式传输文件。我看不到这种可能性pysftp。是否有任何其他支持此功能的 Python 库?

标签: pythonsftppysftp

解决方案


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

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

即使 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)

(转换基于How to convert CRLF to LF on a Windows machine in Python


推荐阅读