Модуль sys: аргументы командной строки, выход из программы и служебная информация
💻 Информатика · 9 класс
Модуль sys даёт программе доступ к служебной информации интерпретатора: аргументы командной строки, коды завершения, стандартные потоки ввода-вывода и путь поиска модулей.

Что такое модуль sys
Модуль sys входит в стандартную библиотеку Python, поэтому устанавливать его не нужно — достаточно команды import sys. Он даёт доступ к переменным и функциям, которыми управляет сам интерпретатор: списку аргументов командной строки, кодам завершения программы, стандартным потокам ввода-вывода и списку путей поиска модулей. В этом уроке разберём только то, что действительно пригодится школьной программе, — полный каталог функций модуля смотрите в официальной документации.
sys.argv — аргументы командной строки
Когда программу запускают из терминала, ей можно передать дополнительные слова: python3 hello.py Аня. При обычном запуске файла sys.argv содержит имя скрипта и переданные ему аргументы, но не имя команды python3. По данным официальной документации, argv[0] — это имя самого скрипта, а реальные аргументы начинаются с индекса 1. Важно: все элементы sys.argv — строки (тип str), даже если пользователь набрал цифры.
import sys
if len(sys.argv) > 1:
print('Привет,', sys.argv[1] + '!')
else:
print('Привет, мир!')Запуск python3 hello.py Аня выведет «Привет, Аня!», а запуск без аргументов — «Привет, мир!». Срез sys.argv[1:] удобен, когда функции нужен список аргументов без имени скрипта.
sys.exit — выход из программы с кодом
Функция sys.exit поднимает исключение SystemExit. Если оно не перехвачено и вызов сделан в основном потоке, программа завершает работу; блоки finally при обычном выходе выполняются. По документации, код 0 означает успешное завершение, ненулевой код обычно указывает на неуспех; если передать строку, она выводится в поток ошибок и программа завершается с кодом 1. Такой приём удобен для проверки аргументов.
import sys
def read_temperature(args):
if len(args) != 1:
sys.exit('Нужен ровно один аргумент: температура, например 25')
try:
celsius = float(args[0])
except ValueError:
sys.exit(f'Это не число: {args[0]}')
fahrenheit = celsius * 9 / 5 + 32
return f'{celsius}°C = {fahrenheit:.1f}°F'
print(read_temperature(sys.argv[1:]))Запуск python3 temp.py 25 выведет «25.0°C = 77.0°F». Запуск python3 temp.py abc завершит программу с сообщением об ошибке, а код возврата будет равен 1 — этот код доступен вызывающей среде.
Пример температуры проверяет количество аргументов и возможность преобразования в float; он не проверяет физическую допустимость температуры. При специальных режимах запуска, например python -c, нулевой элемент argv отличается от имени файла.
Что ещё полезного есть в sys
- sys.stdin, sys.stdout, sys.stderr — стандартные потоки ввода, вывода и ошибок. Функция print пишет именно в sys.stdout, а input читает из sys.stdin.
- sys.path — список строк с путями, где Python ищет модули при импорте.
- sys.version и sys.version_info — строка и именованный кортеж с компонентами версии интерпретатора; удобно проверить, поддерживает ли функция твою версию Python.
Проверь себя
- Что выведет команда print(sys.argv[0]) при запуске python3 prog.py a b? Ответ: prog.py — имя скрипта, независимо от числа аргументов.
- Как узнать количество аргументов без имени скрипта? Ответ: len(sys.argv) - 1. Имя скрипта занимает нулевую позицию.
- Почему sys.exit(0) считается успехом? Ответ: по документации, нулевой код означает успешное завершение, а ненулевой — аварийное; такое соглашение используют командные оболочки.
- Что произойдёт при запуске temp.py с аргументом «3,5» (с запятой)? Ответ: float('3,5') выбросит ValueError, программа выведет «Это не число: 3,5» и завершится с кодом 1.
Кратко о главном
Модуль sys связывает программу с интерпретатором: sys.argv принимает аргументы командной строки (все строки, argv[0] — имя скрипта), sys.exit завершает программу с кодом, а стандартные потоки и пути поиска модулей помогают понять, как Python устроен изнутри.