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(),否则就只能收到成功登录后收到的欢迎字符。