Что печатает sys.argv в Python?

Что печатает sys.argv в Python?

@python_quiz

Разберем этот квиз

Условие

Дан простой скрипт:

python

Варианты ответов описывают разные запуски и выводы. Разберём, что делает код и какие варианты соответствуют реальному поведению интерпретатора.

Что делает код

  • 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:

python

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

bash

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

bash

Если запускать через модуль (-m) или давать полный путь, значение первого элемента может отличаться (например, '-m имя_модуля' или полный путь к файлу), но семантика — первый элемент представляет вызываемый идентификатор, а реальные аргументы идут после — сохраняется.

Выводы

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

Report Page