python subprocess通过端口查找pid并返回结果
时间: 2023-06-08 22:05:30 浏览: 175
你可以使用Python的subprocess模块中的Popen函数打开一个子进程,并使用lsof命令查找指定端口的进程ID,然后将结果返回。下面是一个示例代码:
```
import subprocess
def find_pid_by_port(port):
# 查找指定端口的进程ID
cmd = f"lsof -t -i:{port}"
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
out, err = proc.communicate()
if proc.returncode != 0:
# 如果lsof命令执行失败,则返回None
return None
# 将输出转换为字符串,并移除末尾的换行符
pid = out.decode().rstrip()
if pid.isdigit():
# 如果pid是数字,则返回整数值
return int(pid)
else:
# 否则返回None
return None
```
可以通过调用上面的函数,并指定要查找的端口,来获取进程的PID。
相关问题
windows python subprocess通过端口查找pid并返回结果
您可以使用Python中的psutil模块来实现这个功能,代码如下:
```python
import psutil
# 定义函数来获取指定端口的pid
def get_pid_by_port(port):
for conn in psutil.net_connections():
if conn.status == 'LISTEN' and conn.laddr.port == port:
return conn.pid
return None
# 调用函数获取指定端口的pid
pid = get_pid_by_port(8080)
print(pid)
```
以上代码通过psutil模块中的net_connections方法来遍历当前所有网络连接,并根据端口和连接状态来寻找对应的pid。如果找到了,则返回pid,否则返回None。在这个例子中,我们查找的是端口号为8080的pid。
windows python subprocess通过端口查找全部pid并返回结果
你可以使用以下代码来查找所有使用指定端口的 PID:
```
import subprocess
port = "8080" # 指定要查找的端口号
command = 'netstat -aon | findstr :' + port + ' | findstr LISTENING' # 使用 netstat 命令查找端口
output = subprocess.check_output(command, shell=True) # 执行命令并将结果存储在 output 中
output = output.decode("utf-8") # 将 bytes 转换为 str
pid = output.split()[-1] # 提取 PID
print(pid)
```
该代码使用 `netstat` 命令查找占用指定端口的进程,并获取其 PID。注意,该代码只返回一个 PID,如果有多个进程占用该端口,则需要使用其他方法来获取所有 PID。
阅读全文