【此篇为项目开发过程记录,希望能帮助到遇到同样问题的小伙伴】
功能需求:
在pyqt5 绘制的界面上,实时获取ssh执行的命令的返回结果并刷新UI
难点:
主要分为两大块
Q1. 实时获取ssh执行命令的结
Q2. 实时刷新UI
实现:
已实现,主要思路:
Q1: 使用paramiko invoke_shell 中的 recv 获取命令实时结果
Q2:自定义类继承于QThread, 使用signal传递命令结果,并刷新至UI
实现代码挖坑待有空更新。
踩坑记录:
1. 如何判断命令已经执行完成
channel.recv_ready() 判断的不准确,当命令隔段时间没有输出时就会认为已经执行完成了,不准确。
使用exit_status 等方法判断,经测试都不是想要的结果,UI会hang住。
最后我是通过不断获取命令输出,直到输出我定义好的执行完成的string时才判断为执行完成。
不知道有没有更好的方法呢。
2. TypeError: invalid result from Thread.run()
这里是我在自定义线程类的run方法里写了 return 返回值
结果执行过程中,最后程序会崩溃退出
调试了半天,最后发现把run方法里的返回值去掉就不会出现这个错误了。