Привет! Это моя первая статья, и я решил начать с темы, которая, как мне кажется, актуальна для многих системных администраторов. Часто сталкиваюсь с ситуацией, когда нужно быстро получить информацию о системе — будь то для проверки после внесения изменений, для поиска узких мест в производительности или для составления отчёта. Конечно, существуют различные утилиты и программы для мониторинга, но иногда хочется иметь под рукой простой и гибкий инструмент, который можно быстро адаптировать под свои нужды. Именно поэтому я считаю Python отличным выбором для решения подобных задач. Его простой синтаксис и богатая экосистема библиотек позволяют легко и быстро писать скрипты для получения практически любой системной информации. В этой статье я поделюсь своим опытом и покажу, как с помощью Python можно легко и эффективно получать данные о системе

Итак, давайте начнём с простого и разберёмся, что нам понадобится для работы. Я специально разделил статью на несколько частей, чтобы пошагово показать весь процесс получения и обработки системной информации, а также продемонстрировать результаты на каждом этапе. Приступим!

Что такое библиотека Platform?

Библиотека platform в Python – это ваш незаменимый помощник, когда требуется получить информацию об операционной системе, на которой выполняется ваш код. Она предоставляет простой и удобный способ доступа к данным о платформе, версии ОС, архитектуре процессора и многом другом. Встроенная в Python, platform не требует установки дополнительных пакетов, что делает её ещё более привлекательной для использования.

Зачем нужна platform?

Представьте, что вы разрабатываете кроссплатформенное приложение. Вам нужно убедиться, что ваш код корректно работает на разных операционных системах, таких как Windows, macOS и Linux. В данном контексте мы разберёмся, как быстро определить версию Windows. Это поможет нам оперативно реагировать на проблемы пользователей и предлагать решения, подходящие именно для их версии операционной системы.

Пример использования:

 import platform

def get_windows_version():
   
    try:
     
        windows_version = {
            'платформа': platform.platform(),
            'версия': platform.version(),
            'релиз': platform.release(),
            'система': platform.system()
        }
        return windows_version
    except Exception as e:
        return {'ошибка': str(e)}

def print_windows_version():
  
    version_info = get_windows_version()
    
    if 'ошибка' in version_info:
        print(f"Ошибка получения информации о версии Windows: {version_info['ошибка']}")
    else:
        print("Информация о версии Windows:")
        print(f"Платформа: {version_info['платформа']}")
        print(f"Версия: {version_info['версия']}")
        print(f"Релиз: {version_info['релиз']}")
        print(f"Система: {version_info['система']}")

if __name__ == '__main__':
    print_windows_version()

Результатом будет следующим:

Результат выполнение скрипта
Результат выполнение скрипта

Что такое библиотека Psutil?

Psutil (process and system utilities) - это мощная кроссплатформенная библиотека Python, предоставляющая интерфейс для получения информации о системе и запущенных процессах. Она подобна швейцарскому ножу для системных администраторов, предлагая богатый набор функций для мониторинга и управления ресурсами. С psutil вы можете контролировать использование CPU, памяти, дисков, сети, а также управлять процессами.

Зачем psutil нужен системному администратору?

Долгое время меня, как и многих пользователей, мучил вопрос: как заглянуть "под капот" операционной системы и понять, что происходит внутри, какие процессы потребляют львиную долю ресурсов, вызывая тормоза и заставляя вентилятор взлетать на космическую орбиту? Особенно остро эта проблема стоит для системных администраторов и разработчиков, которым критически важно контролировать состояние системы и оперативно реагировать на возникающие bottlenecks.
В поисках ответа я перепробовал множество инструментов, но все они казались либо слишком сложными, либо предоставляли лишь обрывочную информацию. Однако, в конце концов, я нашел элегантное и эффективное решение – библиотеку psutil для Python.
В данном блоке мы разберем, как с помощью psutil получить исчерпывающую информацию о состоянии CPU и системы в целом, превратив черный ящик операционной системы в прозрачную витрину, где каждый процесс, каждый байт памяти и каждый такт процессора как на ладони.

Итак, начнем наше погружение в мир системного мониторинга с Python и psutil. Приготовьтесь узнать, как получить точный диагноз состояния вашего компьютера и наконец-то понять, кто же виновен в загадочных тормозах?

Примеры использования:

import psutil
import time
from tabulate import tabulate

def get_cpu_usage():

    return psutil.cpu_percent(interval=1)

def get_memory_usage():
 
    memory = psutil.virtual_memory()
    return {
        'Всего': f'{memory.total / (1024**3):.2f} ГБ',
        'Используется': f'{memory.used / (1024**3):.2f} ГБ',
        'Свободно': f'{memory.available / (1024**3):.2f} ГБ',
        'Процент использования': f'{memory.percent}%'
    }

def get_top_processes(n=10):

    processes = []
    for proc in sorted(psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_percent']), 
                       key=lambda x: x.info['cpu_percent'], 
                       reverse=True)[:n]:
        try:
            processes.append([
                proc.info['pid'], 
                proc.info['name'], 
                f"{proc.info['cpu_percent']:.2f}%", 
                f"{proc.info['memory_percent']:.2f}%"
            ])
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            pass
    
    return processes

def main():

    print("=== Мониторинг системы ===")
    

    print(f"\nЗагрузка CPU: {get_cpu_usage()}%")
    

    print("\nИспользование памяти:")
    for key, value in get_memory_usage().items():
        print(f"{key}: {value}")
    

    print("\nТоп процессов по использованию CPU:")
    top_processes = get_top_processes()
    print(tabulate(top_processes, 
                   headers=['PID', 'Название', 'CPU %', 'Память %'], 
                   tablefmt='grid'))

if __name__ == '__main__':
    main()

    

Результатом будет следующим:

Результат выполнение скрипта
Результат выполнение скрипта

Финал

Мы познакомились с двумя мощными инструментами в арсенале Python-разработчика и системного администратора: библиотеками psutil и platform. Они открывают перед нами дверь в святая святых операционной системы, позволяя получить детальную информацию о ее состоянии и запущенных процессах.

Но получить данные – это только полдела. Следующий шаг – превратить сырую информацию в понятные и практически полезные отчеты, которые помогут анализировать производительность системы, диагностировать проблемы и принимать обоснованные решения.

Именно этим мы и займемся сейчас. Я покажу вам, как, используя psutil и platform, создавать разнообразные отчеты, от простых сводок до детальных аналитических справок, которые ответят на самые каверзные вопросы о работе вашей системы. Приготовьтесь увидеть, как сухие цифры превращаются в понятные графики, таблицы и диаграммы, рассказывающие историю жизни вашего компьютера!

Итого будет выглядеть все так.
Итого будет выглядеть все так.

Подведение итогов

Итак, сегодня мы приоткрыли завесу тайны над внутренним миром операционной системы и познакомились с настоящей магией для системного администратора — мощью библиотек Python, таких как psutil и platform. Мы увидели, как, вооруженные этими инструментами, можно получать глубокие знания о работе системы, диагностировать проблемы и даже автоматизировать множество рутинных задач.Но это только начало пути. Мир Python безграничен, и каждая новая библиотека — это еще один шаг к мастерству системного администрирования. Возможности для совершенствования бесконечны, и только от вашего желания учиться зависит, насколько глубоко вы сможете погрузиться в этот увлекательный мир.лагодарю всех, кто прошел этот путь вместе со мной. Надеюсь, эта информация была полезной и вдохновила вас на дальнейшие исследования. До новых встреч на страницах следующих статей!

Комментарии (6)


  1. DrArgentum
    08.12.2024 13:05

    1. Miller777
      08.12.2024 13:05

      А можно получать информацию о свободном месте на логических разделах и примитивный анализ SMART: буквально "хорошо" или "плохо", а не набор параметров?


      1. BOTCODERS Автор
        08.12.2024 13:05

        Да, это вполне осуществимо. Потребуется углубиться в документацию существующих библиотек и, возможно, поискать дополнительные решения. Спасибо за ваш комментарий, он натолкнул на мысль сделать продолжение данной темы.


    1. BOTCODERS Автор
      08.12.2024 13:05

      Благодарю вас за ценные замечания. Вы совершенно правы, указанный вами библиотеками применим. Кроме того, перспективным представляется использование nvidia-smi и lshw, также создание комплексного решения на основе нескольких скриптов, взаимодействующих друг с другом. В ближайшее время планируется публикация продолжения данной работы, где будут рассмотрены предложенные Вами и другие возможные усовершенствования. Ещё раз спасибо за вклад в развитие данной темы.


  1. Bnder111
    08.12.2024 13:05

    Спасибо большое Сатья интересная продолжае дальше


  1. Ambulate
    08.12.2024 13:05

    А есть про сертификаты? Желательно кроссплатформ?