How to print telnet response line by line?

Jackie James picture Jackie James · Dec 31, 2014 · Viewed 11.3k times · Source

Is it possible to print the telnet response line by line, when a command executed over telnet keeps on responding over console ?

Example: I have executed a command (to collect logs), It keeps on displaying logs on console window. Can we read the response line by line & print it , without missing any single line ?

Below snippet writes the log, but only after certain specified time. If I stop the service/script (CTRL-C) in between, that doesn't write anything.

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()

Answer

Mariusz Jamro picture Mariusz Jamro · Dec 31, 2014

You can use tn.read_until("\n") in a loop in order to read one line durint execution of your telnet command

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