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

标签 python sftp pysftp

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

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

最佳答案

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

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

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

另请参阅How to transfer binary file in 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 进行转换)

关于python - 尝试使用 Python SFTP 文件时定义传输模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58099119/

相关文章:

python - SSL : CERTIFICATE_VERIFY_FAILED error when curator access elasticsearch

java - J2ssh ssh客户端经常断线

python - 如何在特定shell下执行远程pysftp命令

python - Python 中使用 SSH key 和密码的 sFTP

java - Spring SFTP 连接 - 从 SFTP 服务器获取文件

python - PySFTP 连接有效,但 get() 失败

python - 导入错误 : cannot import name 'bigquery' from 'google.cloud' (unknown location)

python - 如何使用 pandas 创建具有条件日期时间的新列

python - 在 Python 3.x 中使用 PyInstaller 编译 gettext 语言环境

azure - ADF 中的复制数据事件创建奇怪的临时文件名