Чтение вывода с помощью telnetlib в реальном времени

Я использую telnetlib Python для подключения к какой-либо машине и выполнения нескольких команд, и я хочу получить вывод этих команд.

Итак, каков текущий сценарий -

tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
    tn.read_until("Password: ")
    tn.write(password + "\n")

tn.write("command1")
tn.write("command2")
tn.write("command3")
tn.write("command4")
tn.write("exit\n")

sess_op = tn.read_all()
print sess_op
#here I get the whole output

Теперь я могу получить весь консолидированный вывод в sess_op.

Но я хочу получить вывод команды1 сразу после ее выполнения и до выполнения команды2, как если бы я работал в оболочке другой машины, как показано здесь:

tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
    tn.read_until("Password: ")
    tn.write(password + "\n")

tn.write("command1")
#here I want to get the output for command1
tn.write("command2")
#here I want to get the output for command2
tn.write("command3")
tn.write("command4")
tn.write("exit\n")

sess_op = tn.read_all()
print sess_op

person theharshest    schedule 12.04.2012    source источник


Ответы (3)


Я столкнулся с чем-то подобным, работая с telnetlib.

Затем я понял, что отсутствует возврат каретки и новая строка в конце каждой команды, и сделал read_eager для всех команд. Что-то вроде этого:

 tn = telnetlib.Telnet(HOST, PORT)
 tn.read_until("login: ")
 tn.write(user + "\r\n")
 tn.read_until("password: ")
 tn.write(password + "\r\n")

 tn.write("command1\r\n")
 ret1 = tn.read_eager()
 print ret1 #or use however you want
 tn.write("command2\r\n")
 print tn.read_eager()
 ... and so on

вместо того, чтобы просто писать команду, например:

 tn.write("command1")
 print tn.read_eager()

Если бы у вас это работало только с "\n", может быть достаточно добавить только "\n" вместо "\r\n", но в моем случае мне пришлось использовать "\r\n", и я не еще не пробовал только с новой строкой.

person Pythomania    schedule 10.05.2012
comment
в моем случае это не работает, только отображается «_», я просто даю команду «показать версию» - person ImranRazaKhan; 16.04.2019

Вы должны обратиться к документации модуля telnetlib здесь.
Попробуйте следующее:

tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
    tn.read_until("Password: ")
    tn.write(password + "\n")

tn.write("command1")
print tn.read_eager()
tn.write("command2")
print tn.read_eager()
tn.write("command3")
print tn.read_eager()
tn.write("command4")
print tn.read_eager()
tn.write("exit\n")

sess_op = tn.read_all()
print sess_op
person Pushpak Dagade    schedule 12.04.2012

Я также столкнулся с той же проблемой, когда функция read_very_eager() не отображала никаких данных. Из какого-то поста пришла мысль, что для выполнения команды потребуется некоторое время. поэтому использовал функцию time.sleep().

Фрагмент кода:

tn.write(b"sh ip rou\r\n")
time.sleep(10)
data9 = tn.read_very_eager()
print(data9)
person Abhay Nagar    schedule 17.06.2019