Основные команды интерпретатора Python для выполнения в терминале

Раздел: Инструменты -> Работа с командной строкой

Команды интерпретатора Python

Интерпретатор Python обладает множеством флагов и режимов запуска, которые позволяют гибко управлять выполнением кода, отладкой и профилированием. Рассмотрим основные варианты использования.

Как передать аргументы в программу на Python из командной строки?

Запуск скрипта с аргументами

Самый распространённый способ — вызвать интерпретатор, указав имя файла и необходимые параметры. Команда:

python script.py arg1 arg2 --option value

Python script windows (запуск скрипта python в windows)

Внутри скрипта аргументы доступны через список sys.argv. Первый элемент — имя самого скрипта. Пример:

import sys
print('Имя скрипта:', sys.argv[0])
print('Аргументы:', sys.argv[1:])

Python интерпретатор команды (команды интерпретатора python)

Имя скрипта: script.py
Аргументы: ['arg1', 'arg2', '--option', 'value']

Типичные ошибки

  • Забыли импортировать sys — возникает NameError.
  • Попытка обратиться к sys.argv[1], если аргументов нет — IndexError. Лучше проверять длину len(sys.argv).
  • Пути с пробелами не экранируются — каждый пробел разделяет аргумент. Используйте кавычки: python script.py "my file.txt".

Как отладить код или поэкспериментировать в реальном времени?

Интерактивный режим и запуск с флагом -i

Без аргументов интерпретатор открывает REPL (Read-Eval-Print Loop). Выполнение кода построчно:

python

Для продолжения работы скрипта после его завершения используется флаг -i:

python -i script.py

После выполнения script.py открывается интерактивная оболочка, где доступны все переменные скрипта.

Проблема

При долгом выполнении скрипта интерактивная сессия начинается только после окончания. Для пошаговой отладки удобнее -m pdb.

Как выполнить модуль как самостоятельную программу без указания пути?

Запуск модуля с флагом -m

Флаг -m позволяет запустить модуль, находящийся в одном из каталогов sys.path, как если бы это был скрипт. Пример:

python -m http.server 8000

Запускает простой HTTP-сервер на порту 8000. Аналог для запуска собственного модуля:

python -m mypackage.mymodule

Ошибка

Если модуль не имеет блока if __name__ == '__main__', его выполнение может не дать ожидаемого результата. Убедитесь, что нужный код находится в этой конструкции.

Как выполнить короткий код из командной строки без создания файла?

Использование флага -c

Для однострочных и небольших фрагментов кода используется -c:

python -c "import math; print(math.sqrt(16))"
4.0

Многострочный код можно передать через точку с запятой или с помощью кавычек с переносом строки в оболочке:

python -c "
s = 'Hello'
print(s * 3)
"
HelloHelloHello

Проблемы

  • В Windows двойные кавычки могут конфликтовать с cmd. Используйте одинарные внутри строки или экранирование.
  • Сложные многострочные скрипты лучше помещать в файл.

Как измерить производительность программы из командной строки?

Профилирование с -m cProfile и -m profile

Встроенный профилировщик запускается через -m cProfile. Команда:

python -m cProfile script.py

Выводит таблицу вызовов функций с временем выполнения. Для более краткого отчёта можно отсортировать результаты:

python -m cProfile -s time script.py

Существует альтернативный модуль -m profile (чистый Python, медленнее, но более переносимый).

Ошибки

Профилировщик может замедлить выполнение программы. Не используйте его на production-серверах. Результаты следует анализировать с осторожностью из-за эффекта наблюдателя.

Как запустить программу в режиме отладчика или трассировки?

Отладка с -m pdb и трассировка с -m trace

Модуль pdb запускает пошаговый отладчик:

python -m pdb script.py

Выполнение останавливается на первой строке, доступны команды n (следующий шаг), c (продолжить), p variable (печать переменной) и др.

Для трассировки вызовов используется -m trace:

python -m trace --trace script.py

Показывает каждую выполненную строку. Можно также подсчитать число вызовов (--count).

Проблемы

При большом объёме кода трассировка создаёт огромный вывод. Используйте флаги фильтрации (--ignore-dirs, --ignore-modules).

Как временно изменить пути поиска модулей?

Переменная окружения PYTHONPATH и модуль site

Перед запуском интерпретатора можно задать PYTHONPATH, указывающий дополнительные каталоги для поиска модулей. В Linux/macOS:

PYTHONPATH=/custom/path python script.py

В Windows:

set PYTHONPATH=C:\custom\path && python script.py

Также есть флаг -S для отключения автоматического импорта модуля site, что может быть полезно для изолированной среды.

Ошибки

Значение PYTHONPATH должно содержать абсолютные пути. Если указать несуществующий каталог, Python его проигнорирует, но может возникнуть путаница с относительными путями.

Расширенные примеры использования команд интерпретатора

Как выполнить сложное выражение с -c с использованием piped input?

Пример
echo "import sys; print(sum(map(int, sys.stdin.read().split())))" | python -c -
# Ввод с клавиатуры: 10 20 30
# Результат: 60
60

Дефис - означает чтение из stdin. Можно объединить с другими утилитами.

Как подавить создание __pycache__?

Пример
python -B script.py

Флаг -B отключает создание байт-кода .pyc и папок __pycache__. Полезно для временных или однократных запусков.

Как включить оптимизацию второго уровня (удалить assert и docstrings)?

Пример
python -OO script.py

Флаг -OO применяет оптимизацию -O (удаление assert) и дополнительно убирает docstrings (__doc__). Сокращает размер памяти, но может нарушить работу кода, полагающегося на docstrings.

Как использовать shebang для исполняемых скриптов в Linux/macOS?

Первая строка скрипта указывает интерпретатор:

Пример
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
print("Hello from shebang")

После установки прав на исполнение (chmod +x script.py) скрипт запускается напрямую: ./script.py.

Если путь к интерпретатору неверен, возникает ошибка No such file or directory. Используйте env, чтобы найти Python в PATH.

Как передать данные через pipe в Python-скрипт?

Пример
cat data.txt | python script.py

Внутри скрипта чтение из sys.stdin:

Пример
import sys
data = sys.stdin.read()
print("Received", len(data), "bytes")
Received 12345 bytes

Как запустить виртуальное окружение из команды?

Пример
python -m venv myenv
source myenv/bin/activate  # Linux/macOS
myenv\Scripts\activate      # Windows

После активации интерпретатор будет использовать модули из окружения. Для вызова скрипта без активации используйте полный путь к интерпретатору: myenv/bin/python script.py.

Как программно вызвать интерпретатор из другого скрипта?

Модуль subprocess может запускать Python как внешнюю команду:

Пример
import subprocess
result = subprocess.run(['python', '-c', 'print(2+2)'], capture_output=True, text=True)
print(result.stdout)  # '4\n'
4

Не путать с exec() или eval(), которые выполняют код в текущем процессе. subprocess создаёт отдельный процесс.

Команды интерпретатора Python - comments

En
Python интерпретатор команды (python)