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

时间:2018-05-25 14:47:53

标签: python telnet telnetlib

我正在为一个IBM as400盒子的telnet客户端工作,并且在返回正确数量的数据时遇到了一些麻烦。最初,程序应连接到一个telnet会话,该会话具有写入的用户名和密码字段,然后转到用户shell,允许员工输入数据,访问数据库等。当我调用read_very_eager时,它返回缓冲区填充登录屏幕和登录后会话,而不仅仅是登录后会话。我不能完全告诉为什么会发生这种情况,而其他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()

1 个答案:

答案 0 :(得分:1)

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

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

并使用read_some()代替read_very_eager(),因此您不需要先睡觉。它将等待某些东西变得可用,然后返回那里的所有内容。