【发布时间】:2015-02-27 12:36:35
【问题描述】:
当通过 telnet 执行的命令继续通过控制台响应时,是否可以逐行打印 telnet 响应?
示例:我执行了一个命令(收集日志),它一直在控制台窗口上显示日志。我们可以逐行阅读回复并打印出来,而不会遗漏任何一行吗?
sn -p 下面写入日志,但仅在某个指定时间之后。如果我在两者之间停止服务/脚本(CTRL-C),那不会写任何东西。
import sys
import telnetlib
import time
orig_stdout = sys.stdout
f = open('outpuy.txt', 'w')
sys.stdout = f
try:
tn = telnetlib.Telnet(IP)
tn.read_until(b"pattern1")
tn.write(username.encode('ascii') + b"\n")
tn.read_until(b"pattern2")
tn.write(command1.encode('ascii') + b"\n")
z = tn.read_until(b'abcd\b\n',600)
array = z.splitlines( )
except:
sys.exit("Telnet Failed to ", IP)
for i in array:
i=i.strip()
print(i)
sys.stdout = orig_stdout
f.close()
【问题讨论】:
-
您将输出定向到 f 那么您认为如何将其打印到屏幕上?
-
目前使用 telnet 我观察到使用
read_until存在将未读字节留在 telnet 缓冲区中的危险。人们往往会忘记这些。例如。在上面的示例中,我们在“pattern1”处停止读取,如果缓冲区中“pattern1”之后仍有字节,我们将首先发送用户名,然后读取“pattern1”之后的字节直到“pattern2”,所以我们依赖事实上,“pattern1”实际上是在缓冲区的末尾。它继续每个read_until也可以读取从read_untilbefore 剩余的字节。这样可能会丢失 telnet 响应。