Бесплатный урок с нашим репетитором!

Узнать подробнее

Новая Школа - онлайн-школа подготовки к ЕГЭ
При поддержке
Посмотреть все вопросы нейросети
Бесплатный пробный урок с репетитором

Узнай больше про репетиторов Новой Школы и запишись на бесплатный пробный урок. Мы проверим твой уровень знаний и составим план обучения по любому предмету и классу

Вопрос от Анонимного юзера 08 сентября 2025 13:48

Запишите программу наблюдения за любым домашнем процессом

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

08 сентября 2025 13:48

Ниже пример кода на Python для наблюдения за любым локальным процессом: можно мониторить существующий процесс по PID, найти и наблюдать по имени или запустить внешний процесс и следить за ним. Программа пишет логи в CSV.

Что нужно установить:

  • Python 3.x
  • пакет psutil: pip install psutil

Пример кода (сохраните как monitor_process.py):

import psutil import time import csv import argparse import subprocess import datetime import sys

def find_proc_by_name(name): for p in psutil.process_iter(['name']): if p.info.get('name') == name: try: return psutil.Process(p.pid) except psutil.NoSuchProcess: continue return None

def monitor_process(proc, logfile, interval=1.0, duration=None): with open(logfile, 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) header = ['timestamp','pid','name','status','cpu_percent','memory_rss','memory_vms','io_read_bytes','io_write_bytes','start_time'] writer.writerow(header) # Первая выборка CPU может быть нулевой; сделаем предварительный вызов try: proc.cpu_percent(interval=None) except psutil.NoSuchProcess: print("Процесс завершился до начала мониторинга.", file=sys.stderr) return

    start_time_epoch = time.time()
    while True:
        if not proc.is_running():
            break
        time.sleep(interval)
        try:
            cpu = proc.cpu_percent(interval=None)

            mem = proc.memory_info()
            mem_rss = getattr(mem, 'rss', None)
            mem_vms = getattr(mem, 'vms', None)

            io_read = None
            io_write = None
            try:
                io_counters = proc.io_counters()
                io_read = getattr(io_counters, 'read_bytes', None)
                io_write = getattr(io_counters, 'write_bytes', None)
            except (NotImplementedError, AttributeError):
                pass

            ts = datetime.datetime.now().isoformat(timespec='seconds')
            start_time = datetime.datetime.fromtimestamp(proc.create_time()).isoformat(timespec='seconds')

            writer.writerow([ts, proc.pid, proc.name(), proc.status(), cpu, mem_rss, mem_vms, io_read, io_write, start_time])
            f.flush()
        except psutil.NoSuchProcess:
            break
        except Exception as e:
            print("Ошибка мониторинга:", e, file=sys.stderr)

        if duration is not None and (time.time() - start_time_epoch) >= duration:
            break

def main(): parser = argparse.ArgumentParser(description="Мониторинг любого локального процесса: по PID, по имени или запустив внешний процесс.") group = parser.add_mutually_exclusive_group(required=True) group.add_argument('--pid', type=int, help='PID процесса, который нужно мониторить') group.add_argument('--name', help='Имя процесса для мониторинга (первый найденный)') group.add_argument('--cmd', nargs='+', help='Команда для запуска и мониторинга (пример: --cmd python script.py)') parser.add_argument('--logfile', default='process_monitor.csv', help='Файл лога (CSV)') parser.add_argument('--interval', type=float, default=1.0, help='Период выборки (сек)') parser.add_argument('--duration', type=float, default=None, help='Общее время мониторинга (сек)')

args = parser.parse_args()

proc = None
if args.pid:
    try:
        proc = psutil.Process(args.pid)
    except psutil.NoSuchProcess:
        print("Процесс с PID {} не найден.".format(args.pid), file=sys.stderr)
        sys.exit(1)
elif args.name:
    proc = find_proc_by_name(args.name)
    if proc is None:
        print("Процесс с именем '{}' не найден.".format(args.name), file=sys.stderr)
        sys.exit(1)
elif args.cmd:
    cmd = args.cmd
    p = subprocess.Popen(cmd)
    try:
        proc = psutil.Process(p.pid)
    except psutil.NoSuchProcess:
        print("Не удалось запустить процесс.", file=sys.stderr)
        sys.exit(1)

if proc is None:
    print("Не удалось определить процесс для мониторинга.", file=sys.stderr)
    sys.exit(1)

monitor_process(proc, args.logfile, interval=args.interval, duration=args.duration)

if name == 'main': main()

Как пользоваться:

  • Мониторинг по PID: python monitor_process.py --pid 1234 --logfile log.csv --interval 1

  • Мониторинг по имени (первый найденный процесс с таким именем): python monitor_process.py --name bash --logfile log.csv --interval 1

  • Запуск и мониторинг внешнего процесса: python monitor_process.py --cmd python my_script.py --logfile log.csv --interval 1

Примечания:

  • Параметр interval задаёт частоту выборки.
  • Лог содержит: временная отметка, pid, имя, статус, загрузку CPU, память (RSS и VM), счётчики IO (read_bytes, write_bytes) и время запуска процесса.
  • На некоторых платформах часть полей памяти/IO может быть недоступна; в таких случаях значения будут None.

Если хотите адаптировать под конкретный домашний сценарий (например, мониторинг конкретного сервиса в системе умного дома), скажите название процесса/сервис и требуемые метрики — подстрою пример под ваши условия.

Задай свой вопрос

Напиши любую задачу или вопрос, а нейросеть её решит

Похожие вопросы 15

Бесплатно Мобильное приложение ГДЗ
Мобильное приложение ГДЗ

Задавай вопросы искуcственному интеллекту текстом или фотографиями в приложении на iPhone или Android

qr-codegoogle-playapp-store

Саша — ассистент в телеграмме

Запишите программу наблюдения за любым домашнем процессом
Ниже пример кода на Python для наблюдения за любым локальным процессом: можно мониторить существующий процесс по PID, найти и наблюдать по имени или запустить внешний процесс и следить за ним. Программа пишет логи в CSV. Что нужно установить: - Python 3.x - пакет psutil: pip install psutil Пример кода (сохраните как monitor_process.py): import psutil import time import csv import argparse import subprocess import datetime import sys def find_proc_by_name(name): for p in psutil.process_iter(['name']): if p.info.get('name') == name: try: return psutil.Process(p.pid) except psutil.NoSuchProcess: continue return None def monitor_process(proc, logfile, interval=1.0, duration=None): with open(logfile, 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) header = ['timestamp','pid','name','status','cpu_percent','memory_rss','memory_vms','io_read_bytes','io_write_bytes','start_time'] writer.writerow(header) # Первая выборка CPU может быть нулевой; сделаем предварительный вызов try: proc.cpu_percent(interval=None) except psutil.NoSuchProcess: print("Процесс завершился до начала мониторинга.", file=sys.stderr) return start_time_epoch = time.time() while True: if not proc.is_running(): break time.sleep(interval) try: cpu = proc.cpu_percent(interval=None) mem = proc.memory_info() mem_rss = getattr(mem, 'rss', None) mem_vms = getattr(mem, 'vms', None) io_read = None io_write = None try: io_counters = proc.io_counters() io_read = getattr(io_counters, 'read_bytes', None) io_write = getattr(io_counters, 'write_bytes', None) except (NotImplementedError, AttributeError): pass ts = datetime.datetime.now().isoformat(timespec='seconds') start_time = datetime.datetime.fromtimestamp(proc.create_time()).isoformat(timespec='seconds') writer.writerow([ts, proc.pid, proc.name(), proc.status(), cpu, mem_rss, mem_vms, io_read, io_write, start_time]) f.flush() except psutil.NoSuchProcess: break except Exception as e: print("Ошибка мониторинга:", e, file=sys.stderr) if duration is not None and (time.time() - start_time_epoch) >= duration: break def main(): parser = argparse.ArgumentParser(description="Мониторинг любого локального процесса: по PID, по имени или запустив внешний процесс.") group = parser.add_mutually_exclusive_group(required=True) group.add_argument('--pid', type=int, help='PID процесса, который нужно мониторить') group.add_argument('--name', help='Имя процесса для мониторинга (первый найденный)') group.add_argument('--cmd', nargs='+', help='Команда для запуска и мониторинга (пример: --cmd python script.py)') parser.add_argument('--logfile', default='process_monitor.csv', help='Файл лога (CSV)') parser.add_argument('--interval', type=float, default=1.0, help='Период выборки (сек)') parser.add_argument('--duration', type=float, default=None, help='Общее время мониторинга (сек)') args = parser.parse_args() proc = None if args.pid: try: proc = psutil.Process(args.pid) except psutil.NoSuchProcess: print("Процесс с PID {} не найден.".format(args.pid), file=sys.stderr) sys.exit(1) elif args.name: proc = find_proc_by_name(args.name) if proc is None: print("Процесс с именем '{}' не найден.".format(args.name), file=sys.stderr) sys.exit(1) elif args.cmd: cmd = args.cmd p = subprocess.Popen(cmd) try: proc = psutil.Process(p.pid) except psutil.NoSuchProcess: print("Не удалось запустить процесс.", file=sys.stderr) sys.exit(1) if proc is None: print("Не удалось определить процесс для мониторинга.", file=sys.stderr) sys.exit(1) monitor_process(proc, args.logfile, interval=args.interval, duration=args.duration) if __name__ == '__main__': main() Как пользоваться: - Мониторинг по PID: python monitor_process.py --pid 1234 --logfile log.csv --interval 1 - Мониторинг по имени (первый найденный процесс с таким именем): python monitor_process.py --name bash --logfile log.csv --interval 1 - Запуск и мониторинг внешнего процесса: python monitor_process.py --cmd python my_script.py --logfile log.csv --interval 1 Примечания: - Параметр interval задаёт частоту выборки. - Лог содержит: временная отметка, pid, имя, статус, загрузку CPU, память (RSS и VM), счётчики IO (read_bytes, write_bytes) и время запуска процесса. - На некоторых платформах часть полей памяти/IO может быть недоступна; в таких случаях значения будут None. Если хотите адаптировать под конкретный домашний сценарий (например, мониторинг конкретного сервиса в системе умного дома), скажите название процесса/сервис и требуемые метрики — подстрою пример под ваши условия.