Отследить запускаемый процессом процесс

Я запускаю программу с помощью subprocess.run() с целью отследить общее время работы в этой программе. При это специфика работы программы такова, что она завершает свой процесс и открывает себя вновь другим процессом (названия процессов совпадают, PID не совпадают, проверил с помощью (Get-Process ИМЯ_ПРОЦЕССА| Where-Object SessionId -eq (Get-Process -ID $PID).SessionId).ID). Соответственно, subprocess.run() возвращает мне управление, хотя нужная программа продолжает работу.

Я мог бы захардкодить программу, потому что я знаю имя искомого процесса и я могу просто начать счет времени через секунду после запуска, но я хотел бы найти более универсальный способ.

Я видел, что кто-то получает дочерние процессы с помощью Tasklist /fi 'IMAGENAME eq ИМЯ_ПРОЦЕССА' /v, но процесс переоткрывается быстрее, чем эта команда срабатывает, поэтому я получаю информацию о новом процессе


Ответы (1 шт):

Автор решения: AlrondPrime

Придумал удовлетворительный способ сделать то, что я хотел. Понадобится модуль psutil

now = time.time()
proc = psutil.Popen(ПУТЬ_К_ПРОГРАММЕ)
    name = proc.name()
    proc.wait()
    for proc2 in psutil.process_iter():
        if proc2.name() == name:
        proc2.wait()
now2 = time.time()
session_time = now2-now

Работает как и с "нормальными" приложениями, так и с теми, которые перезапускают себя через лаунчер

→ Ссылка