尝试使用 Python 传输 SFTP 文件时定义传输模式
Define transfer mode when trying to SFTP files using Python
我们正在尝试使用 python 脚本(驻留在 SFTP 服务器上)将文本文件从 Linux 服务器传输到 Windows 服务器。
我们有必要确保使用文本模式传输文件。我在 pysftp
中没有看到这种可能性。还有其他 Python 库支持这个吗?
pysftp/Paramiko 使用 SFTP 协议版本 3。
在SFTP协议版本3中,没有传输模式。或者换句话说,只有二进制传输模式。
即使 pysftp/Paramiko 支持支持 text/ascii 模式的较新版本的 SFTP,也不太可能对您有所帮助。大多数 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)
(基于的转换)
我们正在尝试使用 python 脚本(驻留在 SFTP 服务器上)将文本文件从 Linux 服务器传输到 Windows 服务器。
我们有必要确保使用文本模式传输文件。我在 pysftp
中没有看到这种可能性。还有其他 Python 库支持这个吗?
pysftp/Paramiko 使用 SFTP 协议版本 3。
在SFTP协议版本3中,没有传输模式。或者换句话说,只有二进制传输模式。
即使 pysftp/Paramiko 支持支持 text/ascii 模式的较新版本的 SFTP,也不太可能对您有所帮助。大多数 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)
(基于