import telnetlib import time # 定义交换机参数 HOSTS = ['10.61.168.x', ]for HOST in HOSTS:tn = telnetlib.Telnet(HOST,timeout=22)tn.read_until(b"Password: ")tn.write("h3capadmin".encode('ascii') + b"\n") ##h3c默认密码time.sleep(0.2)tn.write(b"display current-configuration | include wlan\n") ##执行的命令time.sleep(4.5)output_bytes = tn.read_very_eager() #尽可能多地读取所有可用的数据req = output_bytes.decode('ascii').replace('\r', '') #bytes转strips = []for line in req.splitlines():if not line.strip().startswith('wlan ac ip'):continueip = line.split(' ')[-1]ips.append(ip)# print(ip)tn.close()
- 立即读取:
tn.read_very_eager()
会尽可能多地读取所有可用的数据,而不会阻塞或等待更多的数据到达。这意味着它会立即返回当前缓冲区中的所有数据。 - 非阻塞:与
tn.read_all()
不同,后者会等待直到连接关闭才返回数据,tn.read_very_eager()
是非阻塞的,只返回当前可用的数据。
其他读取方法对比
tn.read_all()
:读取所有数据,直到连接关闭。这是一个阻塞调用,适用于一次性读取大量数据的场景。tn.read_some()
:读取一些数据,如果没有数据可读则阻塞。适用于需要逐步读取数据的场景。tn.read_until(expected, timeout=None)
:读取数据直到遇到预期的字符串(expected
)或超时。适用于等待特定响应的场景。