python - 在 python 中,是否有跨平台的方法来确定哪个进程正在监听给定端口?

标签 python tcp cross-platform pid

在 Linux 中,我可以使用 lsof -i ,如以下函数所示:

def FindProcessUsingPort(portnum):
    import os
    fp = os.popen("lsof -i :%s" % portnum)
    lines = fp.readlines()
    fp.close()
    pid = None
    if len(lines) >= 2:
        pid = int(lines[1].split()[1])
    return pid

有没有跨平台的方法来解决这个问题?

作为相关引用,一旦我知道进程 ID,psutil库非常好,让我能够以跨平台的方式确定它的各种有用的流程信息。我目前无法让第一部分跨平台工作(查找 pid)。


如果不熟悉 lsof -i 开关,输出如下所示(启动一个在端口 1234 上打开 TCP 套接字监听的 Python 进程后):

$ lsof -i :1234
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
python  22380 russ   15u  IPv4 4015476      0t0  TCP *:1234 (LISTEN)

最佳答案

这个答案与您的问题更相关,但是如果您可以找到特定于操作系统的方法,但没有严格可移植的方法,那么我会让您的模块如下所示

def find_port_owner_windows(p):
    doit()

def find_port_owner_linux(p):
    doit2()

port_finders = {'nt': find_port_owner_windows,
                'posix': find_port_owner_linux}

try:
    find_port_owner = port_finders[os.name]
except KeyError:
    raise RuntimeError("No known port finder for your OS (%s)" % os.name)

关于python - 在 python 中,是否有跨平台的方法来确定哪个进程正在监听给定端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3874481/

相关文章:

java - 错误 :java: javacTask: source release 1. 8 需要目标版本 1.8

python - 在环内创建随机数

tcp - TCP/IP 是如何报告错误的?

java - 在 Java 中从 Windows 操作系统到 Unix 的文件传输

go - TCP Protobuf消息在Go服务器的接收方不一致到达

Java TCP 服务器在客户端断开连接之前不接收数据包

windows - 基于操作系统的C++条件编译

python - Django 不允许获取/创建新对象 : QuerySet object has no attribute get_or_create

python - 按列拆分数据并将其存储为二维数组

python - 通过 subprocess.call 向 localhost 发出命令