尝试使用 python 脚本将 FTP 文件传输到大型机服务器,但在大型机数据集结束时获取特殊字符
Posted
技术标签:
【中文标题】尝试使用 python 脚本将 FTP 文件传输到大型机服务器,但在大型机数据集结束时获取特殊字符【英文标题】:Trying to FTP file using python script to Mainframe server, but getting special characters at mainframe dataset end 【发布时间】:2021-07-12 15:28:16 【问题描述】:尝试使用 python 脚本将文件 FTP 到大型机服务器,但在大型机数据集结束时获取特殊字符
from ftplib import FTP
host = "hostname"
user = "username"
password = "pass"
with FTP(host) as ftp:
ftp.login(user = user, passwd = pass)
print(ftp.getwelcome())
with open('test.txt', 'rb') as f:
ftp.storbinary('STOR ' + "'TestDataset'", f)
ftp.quit()
这是我用来将文件 FTP 到大型机服务器的代码,看起来像编码问题。大型机使用EBCDIC,python默认编码有UTF-8或UTF-16,但无法解析,请帮忙。谢谢
这是我能够在大型机端看到的输出, text.txt 的内容是“你好”
【问题讨论】:
在编辑或浏览时,您可以输入“HEX ON”,这将显示十六进制值,这可能会提供一些关于正在发生的事情的见解。 【参考方案1】:我不知道python,所以不能告诉你需要编码什么,但是:大型机FTP服务器有一个设置告诉它“网络端”代码页,即你服务器端的UTF-8或UTF -16,以及主机端代码页。
在从 Windows 到大型机的 FTP 会话中,我会发出
quote site sbdataconn=(IBM-037,UTF-8)
注意(编辑 21.08.2021)我混合了代码页,并且刚刚更正了这一点。它是“z/OS 端代码页”(或 z/OS 文件系统代码页)后跟“网络端代码页”。
您可能想了解如何使用 python ftp 接口来指定它。请注意,您可能不需要 quote
关键字,但可以直接以 site
关键字开头。
您还需要找到在大型机上使用的确切的 EBCDIC 代码页。在美国,它可能是 IBM-037 或 IBM-1047。在其他国家/地区,它也可能是任何特定于国家/地区的 EBCDIC 代码页。
【讨论】:
以上是关于尝试使用 python 脚本将 FTP 文件传输到大型机服务器,但在大型机数据集结束时获取特殊字符的主要内容,如果未能解决你的问题,请参考以下文章
在自动 ftp 脚本中通过管道将 stderr 传输到 syslog
将window的shell脚本通过ftp传输到Linux服务器后, shell脚本中执行时提示“没有那个文件或目录”的解决办法