6 способов проверить, запущен ли EXE-файл с помощью Python

В Python вы можете использовать различные методы, чтобы проверить, запущен ли EXE (исполняемый) файл. Эта функция полезна в сценариях, когда вам необходимо отслеживать процессы или выполнять определенные действия в зависимости от рабочего состояния EXE-файла. В этой статье мы рассмотрим шесть различных методов и примеры кода для решения этой задачи.

Метод 1: библиотека psutil
Пример кода:

import psutil
def check_if_exe_running(exe_name):
    for process in psutil.process_iter():
        if process.name().lower() == exe_name.lower():
            return True
    return False
# Usage
exe_name = 'myapp.exe'
is_running = check_if_exe_running(exe_name)
print(f"{exe_name} is running: {is_running}")

Метод 2: WMI (инструментарий управления Windows)
Пример кода:

import wmi
def check_if_exe_running(exe_name):
    c = wmi.WMI()
    for process in c.Win32_Process():
        if process.Name.lower() == exe_name.lower():
            return True
    return False
# Usage
exe_name = 'myapp.exe'
is_running = check_if_exe_running(exe_name)
print(f"{exe_name} is running: {is_running}")

Метод 3: модуль подпроцесса
Пример кода:

import subprocess
def check_if_exe_running(exe_name):
    cmd = f'tasklist /FI "IMAGENAME eq {exe_name}"'
    output = subprocess.check_output(cmd, shell=True).decode()
    return exe_name.lower() in output.lower()
# Usage
exe_name = 'myapp.exe'
is_running = check_if_exe_running(exe_name)
print(f"{exe_name} is running: {is_running}")

Метод 4: библиотека pywin32
Пример кода:

import win32com.client
def check_if_exe_running(exe_name):
    WMI = win32com.client.GetObject('winmgmts:')
    processes = WMI.InstancesOf('Win32_Process')
    for process in processes:
        if process.Name.lower() == exe_name.lower():
            return True
    return False
# Usage
exe_name = 'myapp.exe'
is_running = check_if_exe_running(exe_name)
print(f"{exe_name} is running: {is_running}")

Метод 5: библиотека ctypes (только для Windows)
Пример кода:

import ctypes
def check_if_exe_running(exe_name):
    snapshot = ctypes.windll.kernel32.CreateToolhelp32Snapshot(2, 0)
    process_entry = ctypes.Structure()
    process_entry.dwSize = ctypes.sizeof(process_entry)
    if ctypes.windll.kernel32.Process32First(snapshot, ctypes.byref(process_entry)):
        while True:
            if process_entry.szExeFile.decode().lower() == exe_name.lower():
                return True
            if not ctypes.windll.kernel32.Process32Next(snapshot, ctypes.byref(process_entry)):
                break
    return False
# Usage
exe_name = 'myapp.exe'
is_running = check_if_exe_running(exe_name)
print(f"{exe_name} is running: {is_running}")

Метод 6: команда списка задач (только для Windows)
Пример кода:

import os
def check_if_exe_running(exe_name):
    cmd = f'tasklist /FI "IMAGENAME eq {exe_name}"'
    output = os.popen(cmd).read()
    return exe_name.lower() in output.lower()
# Usage
exe_name = 'myapp.exe'
is_running = check_if_exe_running(exe_name)
print(f"{exe_name} is running: {is_running}")

В этой статье мы рассмотрели шесть различных методов проверки того, работает ли EXE-файл с использованием Python. Эти методы обеспечивают гибкость и могут использоваться в зависимости от ваших конкретных требований. Отслеживая процессы, вы можете предпринимать соответствующие действия или эффективно выполнять задачи системного администрирования.

Не забудьте выбрать метод, который лучше всего соответствует вашим потребностям и конкретной платформе, на которой вы работаете. Приятного кодирования!