Python telnetlib 读取功能 return 比预期更多的数据

Python telnetlib read functions return more data than expected

我正在为 IBM as400 机器开发 telnet 客户端,运行 在返回正确数量的数据时遇到了一些麻烦。最初,该程序应该连接到一个 telnet 会话,该会话具有写入的用户名和密码字段,然后转到用户 shell,让员工输入数据、访问数据库等。当我调用 read_very_eager 它 returns 缓冲区充满了登录屏幕和 post-登录会话,而不仅仅是 post-登录会话。我不太清楚为什么会发生这种情况,其他 read_xyz 方法也什么也不打印,或者有一个缓冲区只填充了登录屏幕的前几个字节。我的代码如下(省略敏感数据):

def login():
    tn = telnetlib.Telnet(host, port)
    sleep(1)

    tn.write(username + "\t")
    tn.write(password + "\r\n")
    sleep(1)

    data = tn.read_very_eager()

    print data

def main():
    print "started"
    login()

main()

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

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

并使用 read_some() 而不是 read_very_eager(),这样您就不需要先睡觉了。它将等待可用的东西,然后 return 那里的一切。