Когда мы пишем Python-код, обычно кажется, что программа существует сама по себе. Но на самом деле она постоянно взаимодействует с интерпретатором, операционной системой и окружением выполнения. Модуль sys — это как раз тот слой, через который Python предоставляет доступ к этим деталям.

Понимание sys полезно не только для утилит и CLI-программ, но и для отладки, настройки окружения и анализа поведения приложения.

Что такое sys

sys — это стандартный модуль Python, который:

  • предоставляет доступ к параметрам интерпретатора

  • позволяет управлять вводом и выводом

  • дает информацию о среде выполнения

  • используется внутри самого Python

Это не утилитарный модуль уровня os, а низкоуровневый интерфейс к Python runtime.

sys.argv — аргументы командной строки

Одна из самых известных возможностей sys.

import sys

print(sys.argv)

sys.argv — это список аргументов, с которыми была запущена программа.

  • первый элемент — имя файла

  • остальные — параметры пользователя

Используется для:

  • CLI-утилит

  • скриптов автоматизации

  • конфигурации поведения программы без изменения кода

sys.exit — корректный выход из программы

import sys

sys.exit(1)

sys.exit выбрасывает исключение SystemExit, которое:

  • завершает выполнение программы

  • может быть перехвачено

  • передает код завершения операционной системе

Это предпочтительный способ завершения Python-программы, а не exit().

sys.stdin, sys.stdout, sys.stderr

Эти объекты отвечают за стандартный ввод, вывод и поток ошибок.

import sys

sys.stdout.write("Hello\n")
sys.stderr.write("Error\n")

Полезно для:

  • перенаправления вывода

  • логирования

  • тестирования

  • CLI-инструментов

Вывод в stderr не смешивается с обычным выводом программы.

sys.path — где Python ищет модули

import sys
print(sys.path)

sys.path — список директорий, в которых Python ищет модули при импорте.

Можно изменять динамически:

sys.path.append("/my/custom/path")

Используется:

  • в плагинных системах

  • для нестандартных структур проектов

  • при отладке проблем с импортами

sys.modules — загруженные модули

import sys
print(sys.modules.keys())

sys.modules — это кэш уже импортированных модулей.

Факты:

  • повторный import не загружает модуль заново

  • объект берется из sys.modules

  • удаление из sys.modules заставляет Python импортировать модуль заново

Используется в:

  • тестах

  • горячей перезагрузке модулей

  • инструментах анализа

sys.getsizeof — размер объекта в памяти

import sys

a = [1, 2, 3]
print(sys.getsizeof(a))

Позволяет узнать:

  • сколько байт занимает объект

  • накладные расходы структур данных

Важно помнить, что getsizeof не учитывает вложенные объекты.

sys.version и sys.version_info

import sys

print(sys.version)
print(sys.version_info)

Используется для:

  • условной поддержки версий Python

  • написания кросс-версийного кода

  • диагностики окружения

sys.platform

import sys

if sys.platform.startswith("win"):
    print("Windows")

Позволяет определить:

  • операционную систему

  • особенности окружения выполнения

Часто применяется в кроссплатформенном коде.

sys.getrecursionlimit

import sys
print(sys.getrecursionlimit())

Показывает максимальную глубину рекурсии.

Можно изменить:

sys.setrecursionlimit(3000)

Полезно при:

  • рекурсивных алгоритмах

  • обработке деревьев

  • анализе stack overflow ошибок

Когда sys действительно нужен

Модуль sys чаще всего используется:

  • в инфраструктурном коде

  • в CLI-программах

  • при отладке сложных багов

  • внутри фреймворков

  • в инструментах анализа окружения

В обычной бизнес-логике он встречается редко, но знание его возможностей сильно расширяет инструментарий разработчика.

Итог

sys — это не просто вспомогательный модуль, а прямой интерфейс к интерпретатору Python. Он позволяет:

  • понимать, как запускается программа

  • управлять вводом и выводом

  • работать с импортами

  • анализировать окружение выполнения

Чем глубже вы работаете с Python, тем чаще sys становится необходимым, а не экзотическим инструментом.