我正在用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)
感谢您的帮助!
答案 0 :(得分:0)
在读取命令输出后测试活动连接:
client.get_transport().is_active()