我正在为一个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()
答案 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()
,因此您不需要先睡觉。它将等待某些东西变得可用,然后返回那里的所有内容。