python - 尝试使用 Python 传输 SFTP 文件时定义传输模式
问题描述
我们正在尝试使用 python 脚本(位于 SFTP 服务器上)将文本文件从 Linux 服务器传输到 Windows 服务器。
我们有必要确保使用文本模式传输文件。我看不到这种可能性pysftp
。是否有任何其他支持此功能的 Python 库?
解决方案
pysftp/Paramiko 使用 SFTP 协议版本 3。
在 SFTP 协议版本 3 中,没有传输模式。或者换句话说,只有二进制传输模式。
即使 pysftp/Paramiko 支持较新版本的 SFTP,它确实支持 text/ascii 模式,也不太可能对您有所帮助。大多数 SFTP 服务器都是 OpenSSH。OpenSSH 也使用 SFTP 3。
如果您需要将文件转换为 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)
推荐阅读
- c# - How to avoid JsonConvert.PopulateObject enqueue on lists
- r - R中的Web抓取表
- reactjs - 在 React 和 AntDesgin 中展开的行不折叠
- python - 如何根据分配给列的值对列中的值进行排序?
- raspberry-pi - 在 RPi 上为自定义 MIB 使用 pysnmp 的 SNMP 代理
- sql-server - 尝试连接到外部 SQL Server 时出错
- jquery - 创建选项
- javascript - Amcharts 列上的点击事件触发另一个图表上的事件
- amazon-web-services - 有什么方法可以完全禁用 Firefox ESR 访问公共 URL?
- javascript - 为什么我的函数不检查子节点?