2012-04-12 3 views
4

Я использую telnetlib Python для telnet на какой-то машине и выполняю несколько команд, и я хочу получить выходные данные этих команд.Чтение вывода с помощью 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") 
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.

Но то, что я хочу, чтобы получить выход command1 сразу после его выполнения и перед выполнением команды команда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 

ответ

2

Вы должны обратиться к документации модуля telnetlibhere.
Попробуйте это -

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 
+4

его не работает в моем случае! – theharshest

7

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

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

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

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