Я пишу сценарий с 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)
Спасибо за вашу помощь!