首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python 查看端口占用

在Python中查看端口占用情况,可以通过调用系统命令或者使用第三方库来实现。以下是几种常见的方法:

方法一:使用 ossubprocess 模块调用系统命令

你可以使用Python的 ossubprocess 模块来执行系统命令,比如在Linux或macOS上使用 lsof 命令,在Windows上使用 netstat 命令。

Linux / macOS 示例代码:

代码语言:txt
复制
import subprocess

def check_port(ip, port):
    cmd = f'lsof -i:{port} | grep LISTEN'
    result = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    if result.returncode == 0:
        print(f"Port {port} is in use.")
    else:
        print(f"Port {port} is free.")

check_port('127.0.0.1', 8080)

Windows 示例代码:

代码语言:txt
复制
import subprocess

def check_port(ip, port):
    cmd = f'netstat -ano | findstr :{port}'
    result = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    if result.returncode == 0:
        print(f"Port {port} is in use.")
    else:
        print(f"Port {port} is free.")

check_port('127.0.0.1', 8080)

方法二:使用第三方库 psutil

psutil 是一个跨平台的库,可以用来检索有关正在运行的进程和系统利用率(CPU、内存、磁盘、网络、传感器)的信息。

安装 psutil

代码语言:txt
复制
pip install psutil

使用 psutil 查看端口占用的示例代码:

代码语言:txt
复制
import psutil

def check_port(ip, port):
    for conn in psutil.net_connections(kind='inet'):
        if conn.laddr.ip == ip and conn.laddr.port == port:
            print(f"Port {port} is in use by process {conn.pid}.")
            return
    print(f"Port {port} is free.")

check_port('127.0.0.1', 8080)

方法三:使用 socket 库尝试绑定端口

另一种方法是尝试在指定端口上创建一个socket连接,如果成功则端口未被占用,如果失败则端口已被占用。

示例代码:

代码语言:txt
复制
import socket

def check_port(ip, port):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        try:
            s.bind((ip, port))
            print(f"Port {port} is free.")
        except OSError:
            print(f"Port {port} is in use.")

check_port('127.0.0.1', 8080)

注意事项

  • 在执行系统命令时要注意安全性,避免命令注入攻击。
  • 使用 psutil 库时,可能需要管理员权限才能获取所有进程的信息。
  • 在Windows系统上,netstat 命令可能需要管理员权限才能显示所有连接信息。

以上方法可以帮助你检查特定端口是否被占用,以及哪个进程占用了该端口。如果你需要进一步的操作,比如终止占用端口的进程,你可以根据进程ID(PID)来执行相应的操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券