Что печатает sys.argv в Python?
@python_quizРазберем этот квиз
Условие
Дан простой скрипт:

Варианты ответов описывают разные запуски и выводы. Разберём, что делает код и какие варианты соответствуют реальному поведению интерпретатора.
Что делает код
- sys.argv — список аргументов командной строки.
- Первый элемент sys.argv (индекс 0) — имя запускаемого скрипта (или путь/модуль в зависимости от способа запуска).
- len(sys.argv) — общее количество элементов в этом списке, включая имя скрипта.
- sys.argv[1:] — срез списка, содержащий все аргументы после имени скрипта (то есть только "пользовательские" аргументы).
Анализ вариантов
Рассмотрим указанные варианты запуска и ожидаемые выводы.
1) Запуск: python script.py; вывод: 1 []
- Обоснование: при запуске без дополнительных аргументов sys.argv = ['script.py'], длина = 1, а sys.argv[1:] = [] — полностью соответствует ожиданию.
2) Запуск: python script.py; вывод: 0 []
- Обоснование: неверно, потому что имя скрипта включено в sys.argv, поэтому длина не может быть 0.
3) Запуск: python script.py a b; вывод: 3 ['a', 'b']
- Обоснование: при двух дополнительных аргументах sys.argv = ['script.py', 'a', 'b'], длина = 3, срез [1:] даёт ['a', 'b'] — это корректное поведение.
4) Запуск: python script.py a b; вывод: 2 ['a', 'b']
- Обоснование: неверно, поскольку длина списка включает имя скрипта и равна 3, а не 2.
Итог: поведение определяется тем, что sys.argv[0] — имя скрипта, а все остальные переданные аргументы идут после него и видны при срезе [1:].
Демонстрация (локально)
Пример файла script.py:

Запуск без аргументов:

Запуск с двумя аргументами:

Если запускать через модуль (-m) или давать полный путь, значение первого элемента может отличаться (например, '-m имя_модуля' или полный путь к файлу), но семантика — первый элемент представляет вызываемый идентификатор, а реальные аргументы идут после — сохраняется.
Выводы
- sys.argv всегда содержит имя запускаемого скрипта в нулевом элементе.
- len(sys.argv) показывает количество элементов с учётом имени скрипта.
- sys.argv[1:] даёт только фактические аргументы пользователя.
- При разборе аргументов помните об этом смещении индексов: часто удобно использовать argparse или click для более удобной обработки.