如何使用 Python 登录大型机

Posted

技术标签:

【中文标题】如何使用 Python 登录大型机【英文标题】:How to Logon to Mainframe using Python 【发布时间】:2013-10-05 20:22:45 【问题描述】:

我是 python 新手,我发现这个线程最适合我的查询。如何使用 python3 连接到大型机服务器,我知道有 ftplib 可以连接,但我不知道如何提供以下信息来登录:1. 区域(开发)2. 用户名、密码 3. 帐户

每当我连接到大型机时,我都应该输入一个区域名称,然后系统会提示我输入用户名和密码。然后我必须输入一个帐户名。

如果需要更多信息,请告诉我。感谢任何人提供的任何帮助。

我尝试使用 hllapi 函数:

      h_func = c_int(1)
      h_text = c_wchar_p("F")
      h_len = c_int(1)
      h_ret = c_int(999)
      #Function calling
      hllapi(byref(h_func), h_text, byref(h_len), byref(h_ret))

输出: 1 F 1 1 --> 为什么我得到返回码 1?是因为我使用了 c_wchar_p 而不是 c_char_p?如果我使用 c_char_p('F') 它不接受字符。可能是什么原因?

【问题讨论】:

地区、用户名、密码、帐户?这看起来不像 FTP。请告诉我们您要使用哪种协议以及“连接”是什么意思。 感谢 Matthias 的快速回复。我希望能够登录到大型机开发区域,该区域有一个唯一的名称,在询问用户名和密码之前需要输入该名称。用户名密码通过身份验证后,它会要求输入必须输入的帐户名(同样是唯一的名称)才能进入 ISPF。当我使用 IBM 个人通信时,情况就是这样。使用的协议是 TCP/IP。但我不知道如何使用 Python 来实现这一点。我希望能够从 PDS 中读取 PS 或成员名称,或者从 PDS 中读取成员。 ***.com/questions/11763405/… 可能会有所帮助,它是特定于窗口的。 这听起来像 TN3270。 【参考方案1】:

如果您打算使用 ISPF,那么您可能是screen scraping。这意味着您将与3270 模拟器进行交互,可能通过HLLAPI。

您可能可以使用另一种方法,即使用 SSH。许多大型机系统现在都可以通过此协议访问。如果 Python 支持它,并且您的大型机人员允许它,那么 SSH 可能会更容易。

【讨论】:

您应该可以通过 FTP 连接到大型机,您需要服务器 ID、用户 ID 和密码。您只能通过 FTP 发送/接收文件 感谢您的回复...有什么方法可以在 python 中使用 IBM 的 EHLLAPI。我到处搜索,既找不到包下载器,也找不到python中的实现。现在我很高兴找到 EHLLAPI 下载。在此先感谢... 对于我之前的问题..我能够按如下方式实现 FTP: from ftplib import FTP def main(): sys = input(str("请输入系统:")) try: ftp = FTP(sys) except Exception as eftp: print("无法联系server", eftp) exit() userName = input(str("请输入用户ID:")) passWord = input(str("请输入密码:")) acct = input(str("请输入账号:") ) try: msg = ftp.login(userName,passWord,acct) print(msg) except Exception as e: print("Authentication Failed", e) exit() pds = input(str("请输入 PDS 名称:")) try: dire = ftp.cwd(pds) print(dire) print(ftp.dir()) 例外为 efile: print("invalid pds name",efile) exit CLIST = ftp.nlst() print(CLIST) for files in CLIST:lines = [] content = ftp.retrlines("RETR "+files,lines.append) pcfile = open (files+'.txt','w') for line in lines: pcfile.write(line+"\n") pcfile.close() ftp.close()【参考方案2】:

要添加上面的 cschneid 答案,我能够实现一个涉及屏幕抓取的解决方案。

我能够实现以下 Python 包:

https://pypi.org/project/py3270/

我使用的模拟器可以在这里找到:

https://sourceforge.net/projects/x3270/

【讨论】:

以上是关于如何使用 Python 登录大型机的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Python发出大型HTTP(S)请求?

如何在 python 中遍历大型 CSV 文件时轻松使用内存?

如何使用 Python 读取大型 Firestore 集合而不会遇到 503 超时错误

如何在 C++ 中调用大型 python 脚本?

我如何使用python写入大型txt文件的每个字符?

如何在 Cython 中将大型 malloc 数组返回或保存为 Python 对象?