Python telnetlib读取函数返回的数据比预期的多

Python telnetlib读取函数返回的数据比预期的多,python,telnet,telnetlib,Python,Telnet,Telnetlib,我正在为IBMAS400机器开发一个telnet客户端,在返回正确数量的数据时遇到了一些问题。最初,程序应连接到telnet会话,该会话有一个用户名和密码字段,并写入其中,然后转到用户shell,允许员工输入数据、访问数据库等。当我调用read\u very\u eager时,它返回充满登录屏幕和登录后会话的缓冲区,而不仅仅是登录后会话。我不太清楚为什么会发生这种情况,而其他的read_xyz方法也不打印任何内容,或者只使用登录屏幕的前几个字节填充缓冲区。我的代码如下(省略敏感数据): 发送答案

我正在为IBMAS400机器开发一个telnet客户端,在返回正确数量的数据时遇到了一些问题。最初,程序应连接到telnet会话,该会话有一个用户名和密码字段,并写入其中,然后转到用户shell,允许员工输入数据、访问数据库等。当我调用
read\u very\u eager
时,它返回充满登录屏幕和登录后会话的缓冲区,而不仅仅是登录后会话。我不太清楚为什么会发生这种情况,而其他的
read_xyz
方法也不打印任何内容,或者只使用登录屏幕的前几个字节填充缓冲区。我的代码如下(省略敏感数据):


发送答案之前,请阅读登录和密码提示。否则,它们将保留在流中,并将由下一个读取调用读取

tn.read_some()
tn.write(username + "\t")
tn.read_some()
tn.write(password + "\r\n")
data = tn.read_some()

read\u some()
代替
read\u very\u eager()
,这样你就不需要先睡觉了。它将等待某些内容可用,然后返回其中的所有内容。

它只读取可用的任何内容。如果没有其他人读取它,为什么不返回登录提示?第一个
read_some()
阻塞,不太清楚原因。如果我将其注释掉,它会运行,但打印数据时会显示登录屏幕的第一行,而不是登录用户屏幕。如果我对第一个
read_some()
进行注释,并将最后一个
read_some()
调用替换为
sleep
read_very_eager()
调用,它会像以前一样打印所有内容。我不确定为什么第一次读取会阻塞。服务器没有发送登录提示吗?它确实发送登录提示。我想这才是真正令人困惑的地方。也许这是因为IBM emulator绿屏(员工目前使用的)使用TN5250,而我的版本使用的是纯telnet,这似乎没有得到库的充分记录/支持。不太确定除此之外是什么原因导致
read\u some
阻塞,可能是windows造成的吗?也许你应该使用
read\u,直到有一个超时,等待每个提示。这样效果肯定更好。如果我添加
read_,直到每当它读得太多时调用
并通过阅读直到我选择的一个预期单词来写出感觉有点“硬编码”的内容,我就可以让它写出我想要的内容。我不认为我的解决方案是完美的,但我一定会把你的回答标记为正确的答案,因为无论出于何种意图和目的,你都回答了我的真实问题。
tn.read_some()
tn.write(username + "\t")
tn.read_some()
tn.write(password + "\r\n")
data = tn.read_some()