在Python中查看端口占用情况,可以通过调用系统命令或者使用第三方库来实现。以下是几种常见的方法:
os
和 subprocess
模块调用系统命令你可以使用Python的 os
或 subprocess
模块来执行系统命令,比如在Linux或macOS上使用 lsof
命令,在Windows上使用 netstat
命令。
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)
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
:
pip install psutil
使用 psutil
查看端口占用的示例代码:
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连接,如果成功则端口未被占用,如果失败则端口已被占用。
示例代码:
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
库时,可能需要管理员权限才能获取所有进程的信息。netstat
命令可能需要管理员权限才能显示所有连接信息。以上方法可以帮助你检查特定端口是否被占用,以及哪个进程占用了该端口。如果你需要进一步的操作,比如终止占用端口的进程,你可以根据进程ID(PID)来执行相应的操作。
领取专属 10元无门槛券
手把手带您无忧上云