Аргументы командной строки: как программа получает данные при запуске
💻 Информатика · 9 класс
Программу можно запускать с параметрами: python3 sum.py 12 30. Разберёмся, как Python получает эти параметры через sys.argv, почему они всегда строки и как безопасно превращать их в числа.

Откуда берутся аргументы
При запуске из терминала слова, набранные после имени файла, попадают в список sys.argv. По официальной документации, элемент с индексом 0 — это имя самого скрипта, а пользовательские аргументы идут дальше: sys.argv[1], sys.argv[2] и так далее. Важнейшее правило: все аргументы имеют тип str. Даже команда python3 table.py 7 передаёт не число 7, а строку '7'.
Пример 1. Сумма чисел
Программа sum.py складывает все переданные ей целые числа. Некорректные значения она пропускает и сообщает об этом в поток ошибок sys.stderr.
import sys
def sum_numbers(args):
total = 0
for text in args:
try:
total += int(text)
except ValueError:
print(f'Пропущено: это не целое число -> {text}', file=sys.stderr)
return total
print(sum_numbers(sys.argv[1:]))Запуск python3 sum.py 12 30 выведет 42. Запуск python3 sum.py 7 abc 3,5 8 выведет 15, а в стандартный поток ошибок stderr попадут две строки про 'abc' и '3,5'. Обратите внимание: ловится только конкретное исключение ValueError — так рекомендует официальный учебник, чтобы не скрывать неожиданные ошибки.
Пример 2. Строка таблицы умножения
Программа table.py требует ровно один аргумент — число от 1 до 9, — проверяет его и либо печатает строку таблицы умножения, либо завершается с сообщением.
import sys
def multiplication_row(args):
if len(args) != 1:
sys.exit('Укажите ровно одно число, например: python3 table.py 7')
try:
number = int(args[0])
except ValueError:
sys.exit(f'Это не целое число: {args[0]}')
if number < 1 or number > 9:
sys.exit('Число должно быть от 1 до 9')
return ' '.join(f'{number} * {i} = {number * i}' for i in range(1, 10))
print(multiplication_row(sys.argv[1:]))Запуск python3 table.py 7 выведет «7 * 1 = 7 7 * 2 = 14 … 7 * 9 = 63». Здесь три проверки подряд: сначала количество аргументов, затем преобразование типа, затем допустимый диапазон. Такой порядок делает сообщения об ошибках понятными.
Аргумент с пробелом
В обычной командной оболочке запись python3 hello.py "Анна Мария" передаёт программе одно имя с пробелом. Оболочка использует кавычки для группировки и не включает их в само имя. Конкретные правила экранирования зависят от оболочки. Данные input читаются уже после запуска, а sys.argv формируется при старте программы.
Типичные ошибки
- Забыть, что аргументы — строки: print(sys.argv[1] + 1) выбросит TypeError, нужен int() или float().
- Обратиться к sys.argv[1], когда аргументов не передали: возникнет IndexError. Проверяйте len(sys.argv) заранее.
- Писать except без конкретного типа: перехват всего подряд маскирует настоящие ошибки программы.
Проверь себя
- Пользователь запустил python3 game.py 3 4. Что вернёт len(sys.argv)? Ответ: 3 — имя скрипта плюс два аргумента.
- Что выведет print(sys.argv[1] + sys.argv[2]) при запуске python3 p.py 12 30? Ответ: 1230 — это сложение строк, а не чисел. Для суммы нужны int().
- Как программа должна реагировать на аргумент '3,14'? Ответ: float('3,14') выбросит ValueError; нужно либо сообщить пользователю о формате с точкой, либо заменить запятую точкой до преобразования.
- Придумайте команду запуска, при которой table.py выведет «Число должно быть от 1 до 9». Ответ: например python3 table.py 10 или python3 table.py 0 — преобразование успешно, но проверка диапазона не пройдена.
Кратко о главном
Аргументы командной строки доступны через список sys.argv: argv[0] — имя скрипта, остальное — строки. Прежде чем использовать аргумент, проверьте, что он есть, и превратите его в нужный тип, обрабатывая ValueError. Чёткие сообщения об ошибках помогают пользователю запустить программу правильно с первого раза.