我正在尝试将SSH连接到一堆路由器中,并从每个路由器中获取一些信息。有些路由器IP是无效的,因为它们是从环路中获取的。对于不存在的那些,我(显然)收到一个socket.timeout错误,并且脚本此时退出执行。我希望python忽略此错误,并继续进行其余的迭代。我已经包含了except/pass/continue命令,但是它们似乎以某种方式并没有完成工作,而我仍然收到socket.timeout错误并退出了脚本:

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

任何对此的见解将不胜感激,并感谢!

最佳答案

弄清楚了!异常(exception)设置为缩进多于尝试ssh连接的缩进。对代码进行了少量更改以适应此要求,并且异常按预期工作!

10-06 05:13
查看更多