Telnetlib的Python中的read_until不会读取预期的字符串。什么是替代品?

时间:2016-05-18 14:13:52

标签: python timeout telnet telnetlib

import getpass
import sys
import telnetlib

host = "10.28.103.126"
user = b"apc"
password = b"apc"
outlet = b"8"

tnObject = telnetlib.Telnet(host)
print("yes")
tnObject.read_until(b"User Name :")
tnObject.write(user + b"\n")
print("sent user")
tnObject.read_until(b" ")
tnObject.write(password + b"\n")
print("sent password")
tnObject.read_until(b"Name ")
tnObject.write(b"1" + b"\n")
print("sent first command")
tnObject.read_until(b">")
tnObject.write(outlet + b"\n")
print("sent second command")
tnObject.read_until(b">")
tnObject.write(b"1" + b"\n")
print("sent third command")
tnObject.read_until(b">")
tnObject.write(b"2" + b"\n") #(1 is ON) (2 is OFF)
print("sent fourth command")
tnObject.read_until(b"Enter ")
tnObject.write(b"yes" + b"\n" + b"\n")
tnObject.read_until(b">")
tnObject.close()

print(tnObject.read_all())

我已经尝试了几十种不同的字符串组合应该被读取,我尝试过前后添加空格,拼写和简单的b“”以期望一个空格但似乎没有什么工作可以发送第一个命令。之前的其他3个字符串读得很好。 read_until的替代方法是什么?

另外,我已经尝试过睡眠(.5)和睡眠(1),但这也无效。我还尝试在不等待read_until的情况下将字符串写入缓冲区。救命啊!

1 个答案:

答案 0 :(得分:0)

你试着看看这个帖子吗? Python - telnet - automation APC PDU - 解决此问题的方法是在编写用户名和密码时添加“\ r \ n”。 所以你需要使用:     tnObject.read_until(b“用户名:”)     tnObject.write(user + b“\ r \ n”)     tnObject.read_until(b“”)     tnObject.write(密码+ b“\ r \ n”)

无需使用tnObject.read_until(b“>”)

请注意,对于其他命令,您可以在结尾处留下“\ n”:     tnObject.write(b“userList \ n”)应该可以正常工作

我在我的APC系统上尝试了它并且它有效。

希望它也适合你!