2015-03-11 11 views
0

Im делает проект, который должен собирать определенную информацию с нескольких коммутаторов. Имейте в виду im new для python и программирования. Что я хочу сделать, это: иметь .txt-файл с именами моих переключателей.
Затем пройдите через этот список и выполните несколько команд и сохраните вывод.Python 3, telnet automation

До сих пор у меня есть следующее, которое работает на одном коммутаторе. Как вы можете видеть в комментариях, я пытаюсь открыть свой файл list.txt и пропустить его, но моя программа не работает из-за того, что она находится в списке (вывод: ['switchname-1']) Как читать мой список .txt и получить переменную как обычный текст, например. switchchname-1 без всех символов списка?

import sys 
import telnetlib 
import time 

password = "password" 
command = "show interface status" 

##with open ("list.txt", "r") as devicelist: 
## hostlist = [] 
## hostlist=devicelist.readlines() 
## print(hostlist) 
hostlist= [ ("switchname-1","",""),] 

for host in hostlist: 

     cmd1 = "enable" 
     tn = telnetlib.Telnet(host[0]) 

     time.sleep(2) 
     tn.read_until(b"Password: ") 
     tn.write(password.encode('ascii') + b"\n") 
     time.sleep(2) 
     tn.write(cmd1.encode('ascii') + b"\n") 
     time.sleep(2) 
     tn.write(password.encode('ascii') + b"\n") 
     time.sleep(2) 
     tn.write(command.encode('ascii') + b"\n") 
     time.sleep(2) 
     tn.write(b"\n") 
     time.sleep(2) 
     tn.write(b"\n") 
     time.sleep(2) 
     tn.write(b"exit\n") 
     lastpost = tn.read_all().decode('ascii') 
     op=open ("output.txt", "w") 
     op.write(lastpost) 
     print("writing to file") 
     op.close() 
     print(lastpost) 
     tn.close() 

Я также пытаюсь выяснить, есть ли какое-то способ печатать только последний выход из переключателей вместо lastpost = tn.read_all().decode('ascii'), каких постов всей сессии телнета?

+0

делает Т.Н. возвращение \ п текст с разделителями? если это так, используйте tn.split ("\ n") [- 1], чтобы получить последнюю строку. Извините, я пропустил эту часть в своем ответе –

ответ

0
with open ("list.txt", "r") as devicelist: 
    hostlist = [] 
    hostlist=devicelist.readlines() 
    for host in hostlist: 
    print host 
    print(hostlist) 

Но я думаю, что было бы лучше, чтобы написать как функция:

def host_list(file_name): 
    with open(file_name, "r") as devicelist: 
     yield devicelist.readline() 

Затем в коде ниже делать:

for h in host_list("your_file"): 
    ... 

Функция будет читать файл по одной строке время и возврат (выход) текста.

0

Рабочий код:

import sys 
import telnetlib 
import time 

password = "pw" 
command = "sh ver" 
term = "term len 0" 

data = open("hostlist.txt") 
for line in data: 
    cmd1 = "enable" 
    tn = telnetlib.Telnet(line.rstrip()) 
    tn.set_debuglevel(1) 
    time.sleep(2) 
    tn.read_until(b"Password: ") 
    tn.write(password.encode('ascii') + b"\n") 
    time.sleep(2) 
    tn.write(cmd1.encode('ascii') + b"\n") 
    time.sleep(2) 
    tn.write(password.encode('ascii') + b"\n") 
    time.sleep(2) 
    tn.write(term.encode('ascii') + b"\n") 
    tn.write(command.encode('ascii') + b"\n") 
    time.sleep(2) 
    tn.write(b"\n") 
    time.sleep(2) 
    tn.write(b"\n") 
    time.sleep(2) 
    tn.write(b"exit\n") 
    lastpost = tn.read_all().decode('ascii') 
    print(lastpost) 
    op=open ("output.txt", "a").write(lastpost) 
    tn.close() 
+0

Делает ли ваш последний пост то, что вам нужно? –

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

  • Нет связанных вопросов^_^