我正在为IBM as400盒使用telnet客户端,但是在获取正确数量的数据返回时遇到了一些麻烦。最初,该程序应连接到一个telnet会话,该会话具有要写入的用户名和密码字段,然后转到用户外壳程序,该外壳程序可让员工输入数据,访问数据库等。当我调用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()

最佳答案

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

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


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

关于python - Python telnetlib读取函数返回的数据超出预期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50531858/

10-16 01:00