📅  最后修改于: 2023-12-03 15:26:33.083000             🧑  作者: Mango
在开发 Django 应用时,有时候会遇到端口被占用的情况,这会导致开发服务器无法启动。此时,我们需要通过 Python 来杀死占用端口的进程,这个过程也被称为「释放端口」。
Python 中提供了一个名为 subprocess
的模块,我们可以通过它来启动系统中的进程,并获取它们的输出。利用这个模块,我们可以通过命令行执行一条命令来杀掉占用所需端口的进程。
下面是一个简单的 Python 脚本示例,用于杀死端口为 8000 的 Django 服务器进程。
import subprocess
def kill_process_on_port(port):
try:
subprocess.run(["lsof", "-ti", ":" + str(port), "-sTCP:LISTEN", "-n"], check=True)
except subprocess.CalledProcessError as err:
print("Error: ", err)
else:
pid = subprocess.check_output(["lsof", "-ti", ":" + str(port), "-sTCP:LISTEN", "-n"])
subprocess.run(["kill", "-9", pid.decode("utf-8").strip()], check=True)
print("Process on port", port, "has been killed.")
在上面的脚本中,我们首先使用 subprocess.run
命令来执行 lsof
命令,该命令用于列出在端口上运行的所有进程。然后,我们使用 check_output
方法来获取 lsof
命令的输出,并使用 kill
命令来杀死这个进程。
在你的 Django 项目中启动服务器时,你可以编写以下代码来杀死 8000 端口上的进程:
if __name__ == "__main__":
try:
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
except Exception as e:
kill_process_on_port(8000)
raise e
在上面的代码中,我们对 execute_from_command_line
方法进行了包装,以便在失败时能够杀死占用 8000 端口的进程,并抛出异常。
以上就是使用 Python 杀死 Django 端口的方法。通过使用 subprocess
模块、lsof
命令和 kill
命令,我们可以轻松地释放占用所需端口的进程,以便启动服务器。