python ssh远程执行Linux命令行时卡死

python ssh远程执行Linux命令行时,卡在stdout.readlines()不继续运行了
代码如下:

# -*- coding:utf-8  -*-
import paramiko


def run(HostIP, username, passwd):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(HostIP, 22, username, passwd)
    cmd = ['enable', 'show interface']
    for i in cmd:
        print("111111111111111111")
        stdin, stdout, stderr = ssh.exec_command(i, get_pty=True, timeout=180)
        print('222222222222222222')
        std = stdout.read()  # 运行到这一行后卡死
        print('333333333333333333')
        print(std)
        ssh.close()


if __name__ == '__main__':
    HostIP = '192.168.10.116'
    username = 'admin'
    passwd = 'adc.admin'
    run(HostIP, username, passwd)

打印结果如下:
111111111111111111
222222222222222222

你写的run()里也没有形参,前面定义的传不进去呀。而且我觉得用stdout.read()是不是可以?

把超时时间设置长一点看看,是不是命令返回很慢

stdin, stdout, stderr = ssh.exec_command(cmd, get_pty=True, timeout=180)

产生原因:

该文件夹中有一个服务挂载在该文件夹某一目录下,因突然关机等异常情况导致该服务无限制等待,机器重启后也不能正常连接。

解决方法:

step1:查看与该文件夹相应的服务挂载情况:mount -l
找到出现问题的文件夹(我的是/home/cephCluster文件夹)

step2:取消挂载文件夹:umount 文件夹 (umount /home/cephCluster)

这一步可能不管用,直接用sudo umount -l 文件夹

卡死是因为程序一直等待返回值,一直没返回就一直卡主,一般的解决办法是:

if(in.available()>0){
in.read();
}

使用available() 函数判断是否能读到值再调用read()函数。望采纳

遇到一样的问题,三个原因,1:返回的数据太大,可加上接收buffer的大小,stdout.readlines(200); 2:远端超时,可加上超时时间 ssh.exec_command(commd_str, timeout=3, get_pty=True);ssh登录远端设备后会进到一个交互式界面中,采用ssh.invoke_shell() 方式去和远端交互,不能用ssh.exec_command(),否则就只能收到成功登录后收到的欢迎字符。