📜  杀死 django 端口 - Python (1)

📅  最后修改于: 2023-12-03 15:26:33.083000             🧑  作者: Mango

杀死 Django 端口 - Python

在开发 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 命令,我们可以轻松地释放占用所需端口的进程,以便启动服务器。