尝试使用 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 文件传输到大型机服务器,但在大型机数据集结束时获取特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

将批处理文件输出管道传输到 Python 脚本

在自动 ftp 脚本中通过管道将 stderr 传输到 syslog

将window的shell脚本通过ftp传输到Linux服务器后, shell脚本中执行时提示“没有那个文件或目录”的解决办法

使用python传输文件以执行脚本NiFi

要使用 FTP 将文件传输到设备,是不是需要在其上运行服务器?

使用 GitLab CI 通过 python 脚本部署到 FTP