Как перебрать ваш скрипт на Python, даже если один оператор потерпел неудачу? - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь выполнить определенные команды в списке ящиков cisco, используя paramiko, если команда не выполняется на одном ящике, она не может прогрессировать в коде и завершается.Я хочу, чтобы код продолжал код, даже если он не может войти в систему на одном устройстве или не может выполнить что-либо сверху

При этом читается файл ts.txt со списком устройств для входа и выполнения некоторых команд,

with open("ts.txt") as f:
    x= [l.strip() for l in f]

    for line in x:

            ssh_client = paramiko.SSHClient()
            ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh_client.connect(hostname=line,username=username,password=password)

            print "Successful connection", line

            remote_connection = ssh_client.invoke_shell()


            remote_connection.send("sh ver")
            remote_connection.send("\n")

Ошибка:

File "/usr/lib/python2.7/site-packages/paramiko-2.4.0-py2.7.egg/paramiko/client.py", line 714, in _auth

Если не удается войти в систему на одном устройстве, оно завершается, я хочу продолжить оставшуюся часть списка.

Любая помощь будет оценена.Спасибо

1 Ответ

1 голос
/ 28 сентября 2019

Из документации по питону блоков try / кроме:

Сначала выполняется предложение try (оператор (ы) между ключевыми словами try и кроме).Если исключение не возникает, предложение исключения пропускается, и выполнение оператора try заканчивается.Если во время выполнения предложения try возникает исключение, остальная часть предложения пропускается.Затем, если его тип соответствует исключению, названному в честь ключевого слова exc, выполняется условие exc, а затем выполнение продолжается после оператора try.Если возникает исключение, которое не соответствует исключению, указанному в предложении исключением, оно передается внешним операторам try;если обработчик не найден, это необработанное исключение, и выполнение останавливается с сообщением, как показано выше.

for line in x:
    try:
        ssh_client = paramiko.SSHClient()
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh_client.connect(hostname=line,username=username,password=password)

        print "Successful connection", line
        remote_connection = ssh_client.invoke_shell()
        remote_connection.send("sh ver")
        remote_connection.send("\n")
    except Exception as e:
        print "Error: " + e

Обратите внимание, что except Exception as e будет перехватывать ВСЕ исключения, а не только то, которое вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...