PyQt+socket实现远程操作服务器

date
May 27, 2020
Last edited time
Jun 27, 2021 06:31 AM
status
Published
slug
pyqt_basic_2
tags
PyQt
summary
type
Post
Field
Plat
来需求了。。干活啦。。
部分时候由于缓存刷新、验证码显示不出来或者浏览器打不开或者打开速度很慢等原因,导致部分测试同事不想使用浏览器登录服务器执行命令。期望有小工具可以替代登录浏览器的操作,直接发送指令到服务器执行并将执行结果返回。
1、开发界面,方便用户输入 IP、用户名、密码以及执行的命令。
2、IP、用户名、密码和命令输入提供默认值。特别是用户名和密码,对于测试服务器来说,通常都是固定的。
3、IP、命令行输入框可以自动补全用户输入。自动补全常用 IP、命令行可以提高操作效率。
4、可以自动保存用户执行成功的 IP、命令行。用于完善自动补全命令(本文代码未实现)。
5、其他异常场景考虑:包括输入参数的合法性检查、socket 发送连接服务器失败提示(连接建立、用户名 / 密码登录失败等)
1、使用 Qt Designer 实现界面开发。开发后界面参考如下:
notion image
2、使用 socket 程序登录服务器并执行命令,并将结果显示在界面文本框中。
Python3.7.4 + Qt Designer + PyQt5
1、使用 Qt Designer 实现界面开发。主窗口模板类型选择 Widget,拖动 4 个 label+4 个输入框 + 1 个按钮 + 1 个 textBrowser 到主界面。修改控件显示名称、对象名称以及设置初始值。完成的设计界面如下所示:
notion image
2、使用pyuic5 -o commandTools.py commandTools.ui指令将. ui 文件转换成. py 文件。
notion image
生成的 commandTools.py 文件内容如下:
3、实现主程序 callcommand.py 调用(业务与逻辑分离)。代码如下:
4、使用 pyinstaller 转换成可执行的. exe 文件。命令:pyinstaller -F callcommand.py -w
notion image
notion image
执行成功,生成的文件在 d:\temp\dist\dist\callcommand.exe
5、运行 callcommand.exe, 点击 run 运行
notion image
1、输入框自动补全功能函数。同样适用于下拉框控件。
实现效果如下所示:
notion image
2、socket 中 sendall 函数要将命令使用 utf-8 编码,否则会导致界面卡住:
3、需要将服务端返回的内容解码再写入 textBrowser 文本框,否则会导致界面卡住。
1、PyQt5 中 textbrowser 控件使用介绍
a、textbrowser 常用设置文本方法主要为增量添加 append()、重新设置 setText() 以及清除内容 clear() 方法。
b、如何设置显示中文。在 Python3.X 程序中,经常会遇到调用中文输出导致程序卡住的问题。正确设置方法参考如下:
output_str = u’设置 textBrowser 输出’
self.result_textBrowser.setText(output_str)
2、简易调试程序服务器搭建
由于本地没有服务器用于调试程序。所以使用 socket 搭建 1 个简易服务器以便调试。服务器功能实现将接收的命令原样返回。就是接收什么命令就给客户端返回什么内容。服务器 IP 为本地 IP127.0.0.1,绑定端口为 6000。代码如下:
 
启动服务器:
notion image
简陋的有点过分,但是满足调试需求了。。。
这个 python+scoket 需求实现的远程登录服务器执行命令只是把基本功能实现了。中间遇到的界面无响应甚至退出的问题(就是 socket 发送和接收内容编解码导致的)。。但是还有很多地方需要优化,比如对入参判断的优化、对连接服务器结果的判断,还有界面的美化等内容。。正是这些小需求及实践过程中遇到问题、解决问题的过程逐步提升编码能力。。fighting https://www.cnblogs.com/linyfeng/p/11392221.html

© Lazurite 2021 - 2024