Основы работы с интерпретатором Python через консоль

Раздел: Основы Python -> Запуск скриптов

Способы запуска Python в Linux

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

Наиболее прямой метод - вызвать интерпретатор python3 с именем файла. Например, для скрипта hello.py с содержимым:

print('Привет, мир!')

Python run app py (запуск приложения python)

команда запуска:

python3 hello.py

Python через командную строку (запуск python из командной строки в linux)

Результат:

Привет, мир!

Интерпретатор читает код и выполняет его. Этот подход не требует прав на исполнение и работает с любым файлом .py. Для Python 2 используется команда python, но в современных системах лучше применять python3.

Типичные проблемы:

  • python3: command not found - Python 3 отсутствует в системе или не добавлен в PATH. Установка: sudo apt install python3 (Debian/Ubuntu) или sudo yum install python3 (CentOS).
  • SyntaxError - ошибка в синтаксисе. Нужно проверить код на отсутствие лишних символов и правильные отступы.
  • ModuleNotFoundError - не установлен необходимый модуль. Установка через pip3 install <module>.

Как выполнять Python код построчно, не создавая файл?

Интерактивная оболочка позволяет вводить команды и сразу видеть результат. Запускается командой:

python3

Пример сеанса:

>>> name = 'Иван'
>>> print(f'Привет, {name}!')
Привет, Иван!
>>> 10 ** 2
100

Выход - exit() или Ctrl+D. Этот режим удобен для тестирования небольших фрагментов и изучения библиотек.

Проблема: введённые данные не сохраняются. Если нужно повторное использование, следует оформить код в файл.

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

Добавление shebang и установка прав на выполнение позволяют запускать скрипт как ./script.py (или просто script.py при наличии в PATH). Пример файла run.sh (содержимое):

#!/usr/bin/env python3
print('Скрипт запущен как программа')

Команды для подготовки:

chmod +x run.sh
./run.sh

Результат:

Скрипт запущен как программа

Shebang #!/usr/bin/env python3 находит Python в окружении, что делает скрипт переносимым. Расширение файла может быть любым, но традиционно используется .py.

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

  • Permission denied - забыли выполнить chmod +x.
  • bad interpreter - путь к Python в shebang неверен. Рекомендуется использовать #!/usr/bin/env python3.

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

Флаг -m позволяет выполнить модуль как скрипт. Пример запуска модуля http.server в текущей директории на порту 8000:

python3 -m http.server 8000

После запуска браузер может открыть http://localhost:8000. Модуль работает, пока не будет прерван (Ctrl+C). Другие распространённые модули: venv, pip, json.tool. Например, форматирование JSON-строки:

echo '{"a":1}' | python3 -m json.tool
{
    "a": 1
}

Флаг -m ищет модуль в стандартных путях и выполняет его.

Ошибка: No module named ... - модуль не установлен. Для сторонних модулей требуется предварительная установка через pip.

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

Аргументы командной строки передаются после имени файла и доступны в sys.argv. Пример скрипта greet.py:

import sys
if len(sys.argv) > 1:
    print(f'Привет, {sys.argv[1]}!')
else:
    print('Аргументы не заданы')

Запуск с именем:

python3 greet.py Алексей
Привет, Алексей!

Без аргументов:

python3 greet.py
Аргументы не заданы

Первый элемент sys.argv[0] содержит имя скрипта. Для сложного парсинга используется модуль argparse.

Проблема: если аргументов больше одного, их нужно обрабатывать по индексам, что неудобно для опций - лучше использовать argparse.

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

Стандартные средства bash позволяют управлять потоками. Запись вывода в файл:

python3 script.py > output.txt

Чтение входных данных из файла:

python3 script.py < input.txt

Объединение (фильтр):

python3 filter.py < data.log > result.log

Конвейер (pipe) для передачи вывода одной программы на вход другой:

cat log.txt | python3 parser.py | head -5

В Python скрипте доступ к stdin, stdout даётся через sys.stdin, sys.stdout.

Ошибка: если скрипт ожидает ввод с клавиатуры, а перенаправление из файла не даёт данных - нужно проверить имя файла и права доступа.

Как запустить Python скрипт в фоновом режиме, чтобы он продолжал работу после закрытия терминала?

Для фонового выполнения используется символ & в конце команды. Дополнительно, чтобы скрипт не зависел от сессии, применяется nohup или disown. Пример:

nohup python3 long_script.py &

Вывод перенаправляется в файл nohup.out по умолчанию. Можно явно указать:

nohup python3 long_script.py > mylog.log 2>&1 &

Для остановки фонового процесса используется команда kill с PID, который можно узнать через jobs или ps.

Проблема: при использовании только & после закрытия терминала процесс может прерваться (SIGHUP). nohup игнорирует этот сигнал. Также важно перенаправлять stderr вместе с stdout, чтобы видеть ошибки.

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

Виртуальное окружение позволяет установить пакеты, не затрагивая системный Python. Создание окружения:

python3 -m venv myenv

Активация окружения (запускает новый shell с отдельным Python и pip):

source myenv/bin/activate

После активации можно запускать скрипты, которые используют пакеты из этого окружения:

python script.py

Деактивация - командой deactivate. Для запуска без активации используется полный путь к интерпретатору:

./myenv/bin/python script.py

Также можно использовать pip install для установки зависимостей.

Ошибки

  • bash: venv: command not found - модуль venv отсутствует (редко, обычно есть).
  • ImportError - пакет установлен в другом окружении или глобально, но не в текущем.

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

Флаг -c позволяет передать код как строку. Пример:

python3 -c "print('Hello from -c')"
Hello from -c

Также можно использовать кавычки для многострочного кода (через \n):

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

Это удобно для быстрых расчётов или встраивания Python в shell скрипты.

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

Продвинутые примеры запуска Python

Пример 1. Запуск с оптимизацией (флаг -O). Скрипт содержит assert, который игнорируется при оптимизации.

Пример
# test_opt.py
x = 1
assert x == 0, 'x не равен 0'
print('Пройдено')

Запуск без оптимизации вызывает ошибку:

Пример
python3 test_opt.py
Traceback (most recent call last):
  File "test_opt.py", line 3, in <module>
    assert x == 0, 'x не равен 0'
AssertionError: x не равен 0

Запуск с флагом -O:

Пример
python3 -O test_opt.py
Пройдено

Пример 2. Использование screen для управления долгими процессами.

Создание сессии:

Пример
screen -S mypythonsession python3 long_running.py

После запуска можно открепиться от сессии (Ctrl+A, затем D). Вернуться позже:

Пример
screen -r mypythonsession

Сессия продолжает работу даже после отключения от терминала.

Пример 3. Переменная окружения PYTHONPATH для добавления путей поиска модулей.

Пример
PYTHONPATH=/home/user/custom_libs python3 script.py

Интерпретатор будет искать модули также в указанной директории. Это удобно для тестирования без установки.

Пример 4. Однострочный Python фильтр через stdin.

Подсчёт строк во входном потоке:

Пример
cat somefile.txt | python3 -c 'import sys; print(sum(1 for _ in sys.stdin))'

Результат: количество строк в файле.

Пример 5. Профилирование выполнения скрипта с помощью модуля cProfile.

Пример
python3 -m cProfile myscript.py

Вывод содержит статистику вызовов функций, время выполнения, количество вызовов.

Пример 6. Открепление фонового процесса от терминала с помощью disown.

Пример
python3 daemon.py &
disown %1

Процесс продолжит работу после выхода из оболочки (в отличие от простого &).

Запуск Python из командной строки в Linux - comments

En
Python через командную строку (python)