Все разделы
Выбрать школу

Школа. Увлечения. Большое будущее.

PROSCHOOLS · ОБРАЗОВАНИЕ РЯДОМ

Ваш город

Выберите город, чтобы находить образование и возможности рядом.

Как учитываем городКаталог и кнопки «Выбрать школу» покажут школы выбранного города.Онлайн-курсы, учебник, ГДЗ и задания к экзаменам доступны по всей России.

Популярные города

Будет выбран: Вся Россия

Учебные материалы останутся прежними.

Поиск по сайту

По всему сайтуШколы выбранного города — выше в результатах

С чего начнём?

↑ ↓ — выбрать результат · Enter — открыть · Esc — закрыть

Модуль sys: аргументы командной строки, выход из программы и служебная информация

💻 Информатика · 9 класс

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

Программный код на экране
Программный код на экранеMartin Vorel · Wikimedia Commons · CC BY-SA 4.0

Что такое модуль 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

  1. sys.stdin, sys.stdout, sys.stderr — стандартные потоки ввода, вывода и ошибок. Функция print пишет именно в sys.stdout, а input читает из sys.stdin.
  2. sys.path — список строк с путями, где Python ищет модули при импорте.
  3. sys.version и sys.version_info — строка и именованный кортеж с компонентами версии интерпретатора; удобно проверить, поддерживает ли функция твою версию Python.

Проверь себя

  1. Что выведет команда print(sys.argv[0]) при запуске python3 prog.py a b? Ответ: prog.py — имя скрипта, независимо от числа аргументов.
  2. Как узнать количество аргументов без имени скрипта? Ответ: len(sys.argv) - 1. Имя скрипта занимает нулевую позицию.
  3. Почему sys.exit(0) считается успехом? Ответ: по документации, нулевой код означает успешное завершение, а ненулевой — аварийное; такое соглашение используют командные оболочки.
  4. Что произойдёт при запуске temp.py с аргументом «3,5» (с запятой)? Ответ: float('3,5') выбросит ValueError, программа выведет «Это не число: 3,5» и завершится с кодом 1.

Кратко о главном

Модуль sys связывает программу с интерпретатором: sys.argv принимает аргументы командной строки (все строки, argv[0] — имя скрипта), sys.exit завершает программу с кодом, а стандартные потоки и пути поиска модулей помогают понять, как Python устроен изнутри.

Связанные материалы

Источники и материалы