需求:啟動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。
有需要的嗎?留下郵箱發給你。