2016-03-22 2 views
0

Я следующую программу, где я перенаправив вывод на терминал в текстовый файл:Как скопировать содержимое текстового файла в переменную через телнет сессии с помощью питона

import telnetlib 
import time 
import string 


tn = telnetlib.Telnet("192.168.1.102") 
print "Attempting Telnet connection...." 
tn.read_until("login: ") 
tn.write("root1\n") 
time.sleep(1) 
tn.read_until("Password:") 
tn.write("\n") 
tn.write("\n") 
tn.read_until("[email protected]:~$") 
tn.write("su\n") 
tn.read_until("[email protected]:/home/root1") 
tn.write("\n") 
print "Telnet logged in successfully....\n" 
tn.write("head /proc/meminfo > /home/a.txt") 
tn.write("\n") 

Я хотел бы скопируйте текстовое содержимое этого файла в буферную переменную и обработайте его. То есть, я не хочу читать с консоли/терминала. Я просто хочу перенаправить вывод в текстовый файл, а затем читать из текстового файла. telnetlib предлагает любую прямую функцию для достижения этого или любого альтернативного способа сделать то же самое?

+0

Как вы собираетесь описывать поток в текстовом файле ввода? Вам придется либо вслепую записать значение, а затем дождаться ответа с сервера telnet (который не соответствует тому, что у вас есть), или вам понадобится способ описать, когда спать (1), когда отправлять несколько ответов строки, а не только одну строку (например, после пароля: вы пишете две строки) и т. д. Можете ли вы представить пример того, как будет выглядеть ваш текстовый файл ввода, используя приведенный выше код в качестве руководства для того, что он будет делать? –

ответ

2

Протокол TELNET - это более или менее отдаленная эмуляция терминала. Он не предлагает никаких средств передачи файлов, поскольку другие протоколы касаются этого. Это означает, что после того, как вы написали файл на удаленной системе, вам нужно будет отобразить его с помощью cat и сохранить вывод команды cat.

В качестве альтернативы вы можете использовать протокол для передачи файлов, такой как FTP, RSYNC, SFTP, FTPS и т. Д., Чтобы загрузить удаленный файл. Просто используйте тот, который доступен в вашей удаленной системе.

1

EDIT этот код считывает из локального файла на удаленном хосте Пожалуйста, попробуйте следующий код, который предположит, что после выполнения вашей команды, вы получите следующую строку: «корень @MYPC:/дома/root1»

tn.write("cat /home/a.txt") 
tn.write("\n") 
data = '' 
while data.find("[email protected]:/home/root1") == -1: 
    data = tn.read_very_eager() 
print data 
+0

Это я знаю. Но я не хочу читать напрямую. Я хочу, чтобы он читался только из текстового файла. То есть, я хочу перенаправить вывод в текстовый файл и прочитать его из текстового файла. Я также включу это условие в сообщение. –

+0

Итак, вы хотите спросить: как я могу прочитать содержимое локального файла на удаленном хосте (предпочтительнее использовать библиотеку telnetlib)? – Yaron

+0

ли обновленный код отвечает вашим потребностям? – Yaron

Смежные вопросы