现在是使用paramiko库远程登录到服务器执行命令但是要等命令执行完毕后才返回输出的结果,没办法实现在WEB端实时显示执行过程,有时候命令执行过程中卡着了,根本不知道是什么情况。
其实这个需求可以实现,而且比较简单,我上个简单的代码吧
测试脚本内容
# -*- coding:utf-8 -*-
import sys
import paramiko
def ssh_exec_command(hostname, port, username, password):
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=hostname, port=port, username=username, password=password)
# 模拟命令输出
command = 'ping www.baidu.com -c 5'
stdin, stdout, stderr = client.exec_command(command)
stderr.channel.set_combine_stderr(stdout)
# 和其他的写法的区别是这里c
while True:
line = stdout.readline()
if len(line) == 0:
break
print(str(line.strip()))
client.close()
return stdout.channel.recv_exit_status()
if __name__ == '__main__':
exit_status = ssh_exec_command(hostname='192.168.209.128', port=22, username='root', password='redhat')
if exit_status == 0:
print('命令执行成功!')
sys.exit(exit_status)
else:
print('命令执行失败!')
sys.exit(exit_status)
测试看看效果
接下来可以改成把输出的信息保存到文件,结合上一篇的内容实现ssh命令实时显示了。