Paramiko - обрабатывать сбой сети во время exec_command - PullRequest
0 голосов
/ 27 декабря 2018

Я пишу сценарий с Paramiko, и я хотел бы обработать сетевую ошибку, если она произойдет во время exec_command.

С помощью приведенного ниже примера кода, если есть ошибка сети с самого начала, этоработает хорошо.Функция пытается выполнить себя до тех пор, пока не будет установлено соединение.

Но если ошибка происходит в середине функции, она не вызывает исключение и возвращает пустую строку.

def execute(command, connection):
    try:
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        client.connect(connection.host, username=connection.username, password=connection.password)
        log("Command: "+command, YELLOW)

        dummy_stdin, stdout, stderr = client.exec_command("source ~/.bash_profile > \
                                                          /dev/null; "+command)
        err = stderr.read()
        res = stdout.read()
        client.close()

        if err.strip() == "OK":
            log(err.strip(), BLANK)
            return err.strip()
        elif err != '':
            log(err.strip(), RED)
            sys.exit()
        else:
            log(res.strip(), BLANK)
            return res.strip()

    except:
        log("Network failure. Trying again ...", RED)
        return execute(command, connection)

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 27 декабря 2018

Проверка активного соединения после завершения чтения вывода команды:

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