python3 paramiko环境问题解决方案

在使用python运行程序时,使用paramiko的时候会出现环境问题,即要使用的包或者库不在其中的情况,这个原因是因为默认情况下,paramiko在远程主机上执行命令的时候,命令的搜索路径为(/usr/local/bin:/bin:/usr/bin),这样我们安装的软件,如果命令不在这些路径下的话,就会执行错误,报找不到命令的错误;
可以试验一下查看:

    import paramiko
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(hostname=ip,port=port,username=username,password=password)
    preCmd = 'echo $PATH'
    stdin, stdout, stderr = client.exec_command(preCmd)
    print(stdout.read())
此时可以看到打印出来的结果为/usr/local/bin:/bin:/usr/bin

为了解决上述的问题可以采用以下的方式:
preCmd = ‘source /etc/profile; echo $PATH’
此时会将profile文件中配置的环境全部加载到PATH的环境当中,可以解决大多数的问题

另外,paramiko的实现是采用异步的方式执行的,即client.exec_command(cmd)时,会即可执行结束,对之后的结果不会做出回应,因此,如果后面的python代码执行对client.exec_command(cmd)执行有依赖时,可以采用如下的方法:

stdin,stdout,stderr = client.exec_command(cmd)
stdout_result = stdout.readlines()
stderr_result = stderr.readlines()

该方法会在执行结束之后,读取结果,才会执行之后的操作。

你可能感兴趣的:(python)