需求:启动tomcat的时候,有其他程序的端口占用了8080端口,导致启动失败,提示端口被占用,但是windows查询端口占用程序很麻烦。所以利用python开发了小工具。
技术:
使用了pyside6框架开发UI界面。
利用python调用cmd命令查找端口占用的程序pid。
调用cmd命令杀掉程序pid。
具体代码如下:
# -*- coding: utf-8 -*
# window杀掉占用的端口程序,例如8080端口被不知名的程序占用,导致tomcat启动报错端口被占用.使用此工具,可以直接杀死该程序,从而顺利启动tomcat或者其他需要使用8080的软件
import os
import sys
from PyQt6 import QtWidgets, QtCore
# 铺界面
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('kill进程')
self.button = QtWidgets.QPushButton("杀死进程")
self.label = QtWidgets.QLabel("请输入端口号:")
self.text = QtWidgets.QLineEdit("8080")
self.layout = QtWidgets.QVBoxLayout(self)
self.layout.addWidget(self.label)
self.layout.addWidget(self.text)
self.layout.addWidget(self.button)
self.button.clicked.connect(self.magic)
def magic(self):
port = self.text.text()
if port=='':
QtWidgets.QMessageBox.warning(self, "提示框", "端口号不能为空")
return
self.findPort(port=port)
QtWidgets.QMessageBox.warning(self, "提示框", f'成功杀死占用{port}端口的进程')
# 杀死端口占用进程的主要方法
def findPort(self,port='8080'):
# 在cmd中使用命令 netstat -aon|findstr 8080 可以显示出8080的进程id,然后可以使用 taskkill -pid 进程号杀掉进程
with os.popen(f'netstat -aon|findstr "{port}"') as res:
res = res.read().split('\n')
# result = []
for line in res:
print(line)
temp = [i for i in line.split(' ') if i != '']
if len(temp) > 4:
# result.append({'pid': temp[4], 'address': temp[1], 'state': temp[3]})
r = os.popen(f"taskkill -pid {temp[4]} -f")
print(f'成功杀死占用{port}端口的进程')
if __name__ == "__main__":
app = QtWidgets.QApplication([])
widget = MyWidget()
widget.resize(200, 100)
widget.show()
sys.exit(app.exec())
代码完成之后,利用pyinstaller打包成 exe文件,可以直接运行。
pyinstaller -F .\KillPortTask.py --noconsole
不得不说,python虽然很方便,但是打包的程序太大了。因为包含了qt的组件。
足足有23M多。
等过几天用c++开发一下,应该只有几KB。
有需要的吗?留下邮箱发给你。