2016-05-21 4 views
0

Я пытаюсь SSH в кучу маршрутизаторов и grep получить некоторую информацию от каждого. Некоторые из IP-адресов маршрутизатора могут быть недействительными, поскольку они получены из цикла. Для тех, которые не существуют, я получаю ошибку socket.timeout (очевидно), и сценарий завершает выполнение в этой точке. Я хочу, чтобы python игнорировал эту ошибку и продолжал работу с остальными итерациями. Я включил кроме/пасс/продолжают команды, но они как-то не кажется, делать свою работу, и я все еще получаю ошибку socket.timeout и выход из сценария:Невозможно игнорировать ошибку socket.timeout с использованием Paramiko

import paramiko 
import socket 
import subprocess 
import time 

site = ['sao2','mia2','par2','scs2','sin4','sjl1','syd3','tok2','tor1','wdc1','akl1','chc1','chi2','cop2','dal1','fra2'] 
csr_hostname = 'csr_1' 
csr_pass = str('*******') 
username = str('test_user') 
csrcmd = 'sh ver \n' 

f = open ("version_output.txt", 'r+') 
#********************************************************************* 
for DC in site : 
    y = str(DC) 

    mcp = socket.gethostbyname(y) 

    mcpip = mcp.split('.') 
    mcpip2 = int(mcpip[0]) 
    mcpip3 = int(mcpip[1]) 
    mcpip4 = int(mcpip[2]) 

    print (DC + ":") 
    f.write('\n') 
    f.write(DC) 
    f.write('\n=====\n') 

    for i in range(5,33): 
     x=37+(2*i) 
     mcpcsr = (str(mcpip2) + ('.') + str(mcpip3)+ ('.') + str(mcpip4)+ ('.') + str(x)) 
     fqdn1=(str(i)+'-01.'+str(DC)) 
     print i 
     ssh = paramiko.SSHClient() 
     ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
     ssh.connect(mcpcsr, username=username, password=csr_pass, look_for_keys = False, allow_agent = False, timeout=10) 

     router_channel = ssh.invoke_shell() 
     router_channel.settimeout(2) 


     try : 
      buff = '' 
      router_channel.send(csrcmd) 
      time.sleep(1) 
      buff = router_channel.recv(99999) 
      for item in buff.split("\n"): 
       if "Cisco IOS XE Software, Version" in item : 
        csrver = (fqdn1 + " : " + item.strip()) 
       if "Cisco IOS Software" in item : 
        csrver1 = (item.strip()) 
      print csrver 
      print csrver1 
      f.write(csrver) 
      f.write('\n') 
      f.write(csrver1) 
      f.write('\n') 
      fqdn1 = '' 
      ssh.close() 


    #********************************************************************* 

     except socket.timeout: 
      print ("bla bla") 
      pass 
      continue 

     except socket.error : 
      print ("bla bla") 
      pass 
      continue 

     except paramiko.SSHException, socket.error : 
      print ("bla bla") 
      pass 
      continue 
     except Exception : 
      print ("bla bla") 
      pass 
      continue 

    #********************************************************************* 

Выход:

Traceback (most recent call last): 
    File "csrnum.py", line 36, in ? 
    ssh.connect(mcpcsr, username=username, password=csr_pass, look_for_keys = False, allow_agent = False, timeout=10) 
    File "/usr/lib/python2.4/site-packages/paramiko/client.py", line 291, in connect 
    sock.connect(addr) 
    File "<string>", line 1, in connect 
socket.timeout: timed out 

Любое понимание этого будет высоко оценено и благодарно за!

ответ

0

Выяснил это! Исключениями был установлен один отступ больше, чем при попытке ssh-соединений. Сделал небольшое изменение кода, чтобы разместить это, и исключения работают, как ожидалось!

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

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