Основные команды интерпретатора Python для выполнения в терминале
Команды интерпретатора Python
Интерпретатор Python обладает множеством флагов и режимов запуска, которые позволяют гибко управлять выполнением кода, отладкой и профилированием. Рассмотрим основные варианты использования.
Как передать аргументы в программу на Python из командной строки?
Запуск скрипта с аргументами
Самый распространённый способ — вызвать интерпретатор, указав имя файла и необходимые параметры. Команда:
python script.py arg1 arg2 --option valuePython 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
# Результат: 6060
Дефис - означает чтение из 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 создаёт отдельный процесс.