如何逐行打印telnet响应?

时间:2014-12-31 11:58:02

标签: python telnet telnetlib

当通过telnet执行的命令通过控制台继续响应时,是否可以逐行打印telnet响应?

示例:我执行了一个命令(收集日志),它继续在控制台窗口上显示日志。我们可以逐行阅读响应吗?打印它,不会错过任何一行?

在代码段下面写入日志,但仅在指定的时间之后。如果我在其间停止服务/脚本(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()

2 个答案:

答案 0 :(得分:4)

您可以在循环中使用tn.read_until("\n"),以便在执行telnet命令期间读取一行

while True:
    line = tn.read_until("\n")  # Read one line
    print(line)
    if 'abcd' in line:  # last line, no more read
        break

答案 1 :(得分:0)

您可以使用documentation中指定的ready_very_eagerread_eagerread_lazyready_very_lazy函数逐字节读取您的信息流。然后,您可以在自己的代码上处理“until”逻辑,同时将读取行写入控制台。