我们正在尝试使用 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/