[Вопрос решен] Запуск lsof -i :port выдаст список процессов, занимающих введённый...

Запуск lsof -i :port выдаст список процессов, занимающих введённый порт.

Например, lsof -i :5000.

Напишите функцию, которая на вход принимает порт

def get_pids(port: int) -> List[int]:

“””

Возвращает список PID процессов, занимающих переданный порт

@param port: порт

@return: список PID процессов, занимающих порт

“””

if not isinstance(port, int):

raise ValueError(‘Порт должен быть целым числом’)

#Вызываем команду lsof -i :port и читаем результат

pids: List[int] = []

(1) Смотреть решение

Ответ нейросети AfinaAI

Привет‚ друзья!​ Сегодня я хочу поделиться с вами функцией‚ которая поможет вам определить PID процессов‚ занимающих определенный порт на вашем компьютере.​ Для этого мы воспользуемся командой lsof -i ⁚port‚ которая позволяет нам получить список процессов‚ связанных с определенным портом.​

Функция get_pids

Для начала давайте опишем функцию get_pids‚ которая будет принимать порт в качестве аргумента и возвращать список PID процессов‚ занимающих этот порт⁚

from typing import List

def get_pids(port⁚ int) -> List[int]⁚
    ″″″
    Возвращает список PID процессов‚ занимающих переданный порт
    @param port⁚ порт
    @return⁚ список PID процессов‚ занимающих порт
    ″″″
    if not isinstance(port‚ int)⁚
        raise ValueError('Порт должен быть целым числом')

    # Вызываем команду lsof -i ⁚port и читаем результат
    pids⁚ List[int]  []
    # Ваш код здесь 
    
    return pids

Функция принимает один аргумент ⸺ порт‚ который должен быть целым числом.​ Если переданное значение не является целым числом‚ функция вызывает ошибку ValueError.​

Теперь давайте реализуем код‚ который вызывает команду lsof -i ⁚port и читает результат.​ Для этого мы будем использовать модуль subprocess⁚

import subprocess

def get_pids(port⁚ int) -> List[int]⁚
    ″″″
    Возвращает список PID процессов‚ занимающих переданный порт
    @param port⁚ порт
    @return⁚ список PID процессов‚ занимающих порт
    ″″″
    if not isinstance(port‚ int)⁚
        raise ValueError('Порт должен быть целым числом')

    # Выполняем команду lsof -i ⁚port
    process  subprocess.​Popen(['lsof'‚ '-i'‚ f'⁚{port}']‚ stdoutsubprocess.​PIPE)
    output‚ _  process.​communicate

    # Обрабатываем результат
    pids⁚ List[int]  []
    lines  output.​decode.split('\n')
    for line in lines⁚
        cols  line.​split
        if len(cols) > 1 and cols[0].​isdigit⁚
            pids.​append(int(cols[0]))

    return pids

Мы использовали функцию Popen из модуля subprocess‚ чтобы выполнить команду lsof -i ⁚port и получить ее вывод.​ Затем мы обработали вывод‚ разделив его на строки и извлекли PID процессов из нужных строк.​

Читайте также  Напиши текст в стиле исполнителя LILDRUGHILL на русском

Проверка функции

Теперь‚ когда у нас есть функция get_pids‚ давайте проверим ее работу⁚

port  5000
pids  get_pids(port)
print(f'Процессы‚ занимающие порт {port}⁚ {pids}')

Запустив этот код‚ вы должны увидеть список PID процессов‚ занимающих порт 5000.​

Теперь у нас есть функция get_pids‚ которая позволяет нам быстро определить PID процессов‚ занимающих определенный порт на нашем компьютере.​ Это очень полезно‚ когда нам нужно найти и завершить процессы‚ которые могут приводить к конфликтам или замедлять работу нашей системы.​ Надеюсь‚ эта статья была полезной для вас!

AfinaAI