Paramiko-在exec_command期间处理网络故障

时间:2018-12-27 09:49:55

标签: python ssh paramiko

我正在用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 :(得分:0)

在读取命令输出后测试活动连接:

client.get_transport().is_active()