Выполнение скриптов на языке Python

Раздел: Управляющие конструкции -> Выполнение скриптов

Основные способы запуска файлов .py

Как запустить файл .py через терминал?

Основной способ выполнить файл сценария на Python состоит в передаче имени файла интерпретатору. Для этого используется командная строка операционной системы. Подходят PowerShell, CMD, Terminal в macOS и командная оболочка в Linux.

Пусть в файле example.py находится небольшой код:


print('Скрипт выполнен')
print(2 + 2)

Python run py file (запуск .py файла в python)

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

python example.py

В системах Linux и macOS часто используется команда python3:

python3 example.py

На Windows при установке из официального документа может быть доступна команда py:

py example.py

Если файл находится в другом каталоге, интерпретатору передается путь к нему:

python /home/user/scripts/example.py
python C:/Users/name/scripts/example.py

Интерпретатор Python выполняет инструкции последовательно. После завершения скрипта управление возвращается в оболочку. Такой запуск применяется для большинства автоматических задач, утилит и проверок кода.

Как запустить файл .py как модуль с помощью параметра -m?

Команда python -m example запускает файл example.py из текущего каталога как модуль. Расширение .py в команде не указывается.

python -m example

Для пакета используется точечная запись:

python -m package.module

Такой вариант удобен для проектов, в которых файл содержит относительные импорты. Запуск через -m корректно формирует __package__ и __name__, поэтому относительные импорты внутри пакета работают.

Как сделать .py файл исполняемым в Unix и macOS?

В Linux и macOS в первую строку файла добавляется shebang:

#!/usr/bin/env python3

Строка env находит интерпретатор python3 в переменной PATH. Пример файла:


#!/usr/bin/env python3
print('Прямой запуск')

Затем файлу назначается право на выполнение:

chmod +x script.py

После этого запуск выполняется без указания python:

./script.py

Цель такого варианта: получить самостоятельную команду для пользователя. Скрипт вызывается как обычная программа, а интерпретатор подставляется автоматически.

Как выполнить содержимое .py файла в интерактивной сессии Python?

В интерактивном режиме интерпретатора можно прочитать файл и передать его текст функции exec:

exec(open('script.py').read())

Для файла с кодировкой UTF-8 явно указывается encoding:

exec(open('script.py', encoding='utf-8').read())

Такой способ запуска подходит для быстрого тестирования внутри уже открытой сессии. Переменные из файла попадают в текущее пространство имен. Нужно учитывать, что выполнение непроверенного кода через exec небезопасно.

Как запустить скрипт из другого Python-файла в том же процессе?

Стандартный модуль runpy позволяет выполнить файл и получить его глобальные переменные:


import runpy

result = runpy.run_path('script.py')
print(result['value'])

Если в файле есть код:


value = 7 * 6

то программа выведет 42. Использование runpy подходит для случаев, когда нужно запустить скрипт без создания отдельного процесса и сохранить доступ к его данным.

Как запустить .py файл как отдельный процесс из Python?

Модуль subprocess создает новый процесс. Внутри другого Python-скрипта можно использовать sys.executable, чтобы применить тот же интерпретатор, который выполняет текущую программу:


import subprocess
import sys

process = subprocess.run([sys.executable, 'script.py'])
print(process.returncode)

Для получения вывода добавляются параметры capture_output и text:


process = subprocess.run(
    [sys.executable, 'script.py'],
    capture_output=True,
    text=True
)
print(process.stdout)

Отдельный процесс нужен при изоляции сбоев, передаче данных через stdin/stdout и параллельном выполнении скриптов.

Как загрузить файл .py из произвольного пути через importlib?

Если нужно импортировать код, который не находится в sys.path, применяется importlib.util:


import importlib.util

spec = importlib.util.spec_from_file_location('custom_module', '/path/to/script.py')
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
print(module.some_variable)

Такой вариант полезен для подключения конфигураций или библиотек из внешнего каталога. Блок if __name__ == '__main__' не выполняется, если имя модуля не равно __main__.

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

Параметр -i оставляет интерпретатор открытым после выполнения файла:

python -i script.py

После окончания кода появляется приглашение, в котором можно обращаться к переменным из скрипта. Удобно для отладки и экспериментов с объектами.

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

Переменная окружения PYTHONPATH добавляет каталоги в список путей поиска модулей. В Linux или macOS:

PYTHONPATH=/home/user/mylibs python script.py

В командной строке Windows:

set PYTHONPATH=C:/path/to/libs
python script.py

В PowerShell:

$env:PYTHONPATH='C:/path/to/libs'; python script.py

Этот вариант нужен, когда скрипт импортирует модули из папки, которая не совпадает с текущим каталогом.

Какие ошибки чаще всего появляются при запуске .py файла?

python: command not found или python не является внутренней или внешней командой. Интерпретатор не установлен, либо его каталог не добавлен в PATH. В Windows во время установки выбирается пункт Add Python to PATH. В Linux команда может называться python3.

PermissionError: [Errno 13] Permission denied. При запуске через ./script.py файл не имеет права на выполнение. Команда chmod +x script.py решает эту проблему.

SyntaxError. Файл может быть написан для другой версии языка, например, код Python 2 запускается интерпретатором Python 3. Также некоторые конструкции требуют минимальную версию Python.

ModuleNotFoundError. В скрипте используется модуль, который не установлен в окружении. Установка зависимости выполняется через pip: python -m pip install requests.

UnicodeDecodeError. Файл прочитан в кодировке, отличной от ожидаемой. Рекомендуется сохранять исходный код в UTF-8 без BOM.

Ошибка shebang после переноса файла из Windows. Если первая строка содержит символ возврата каретки CRLF, оболочка может не найти интерпретатор. Файл нужно пересохранить с переводами строк LF.

Расширенные примеры запуска с параметрами и окружением

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

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

Пример

import sys

if len(sys.argv) > 1:
    print('Привет,', sys.argv[1])
else:
    print('Привет, мир')
print('Аргументы:', len(sys.argv))

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

Пример
python greet.py Alex

Результат:

Привет, Alex
Аргументы: 2

Список sys.argv содержит имя файла и все переданные значения. Первый элемент всегда путь к запускаемому файлу.

Как отключить буферизацию вывода?

Пример

import time

for i in range(3):
    print('step', i)
    time.sleep(1)
Пример
python -u log_script.py
step 0
step 1
step 2

Параметр -u включает безбуферный режим. При перенаправлении вывода в файл или конвейер строки появляются сразу, а не после заполнения буфера.

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

Пример

x = 41
text = 'значение'
Пример
python -i vars_demo.py

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

>>> x + 1
42
>>> text
'значение'
>>> exit()

Переменные видны для проверки в командной строке интерпретатора.

Как запустить отладчик pdb для файла .py?

Пример

def divide(a, b):
    return a / b

print(divide(2, 0))
Пример
python -m pdb debug_script.py
> debug_script.py(1)<module>()
-> def divide(a, b):
(Pdb) continue
Traceback (most recent call last):
  File "debug_script.py", line 4, in <module>
    print(divide(2, 0))
  File "debug_script.py", line 2, in divide
    return a / b
ZeroDivisionError: division by zero

Режим pdb предоставляет команды для пошагового прохода, просмотра стека и изменения переменных.

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

Пример

def greet(name):
    return 'Hello ' + name

print(greet('Python'))
Пример
python -m trace --trace trace_demo.py
 --- modulename: trace_demo, funcname: <module>
trace_demo.py(1): def greet(name):
trace_demo.py(4): print(greet('Python'))
 --- modulename: trace_demo, funcname: greet
trace_demo.py(2): return 'Hello ' + name
Hello Python

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

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

Пример

# calc_data.py
first = 6
second = 7
product = first * second
Пример

import runpy

namespace = runpy.run_path('calc_data.py')
print(namespace['product'])
42

Функция возвращает словарь глобальных переменных, поэтому данные из скрипта доступны без повторного чтения файла.

Как запустить дочерний процесс с переменными окружения?

Пример

import os
import subprocess
import sys

env = os.environ.copy()
env['APP_MODE'] = 'test'

process = subprocess.run(
    [sys.executable, 'env_app.py'],
    env=env,
    capture_output=True,
    text=True
)
print('stdout:', process.stdout)
print('stderr:', process.stderr)

Содержимое файла env_app.py:

Пример

import os
print('Mode:', os.getenv('APP_MODE', 'default'))
stdout: Mode: test
stderr: 

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

Как загрузить файл через compile и exec с указанием имени для traceback?

Пример

with open('compiled_script.py', encoding='utf-8') as f:
    code = compile(f.read(), 'compiled_script.py', 'exec')
exec(code)

Содержимое файла compiled_script.py:

Пример

# compiled_script.py
print('compiled execution')
compiled execution

Второй аргумент compile задаёт имя файла в сообщениях об ошибках.

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

Пример

import time

for i in range(5):
    print('iteration', i)
    time.sleep(0.5)

Команда в shell:

Пример
nohup python background_demo.py > output.log 2>&1 &

Терминал сразу возвращает управление, вывод попадает в файл output.log.

[1] 12345

Номер PID в выводе отличается для каждого запуска.

Как запустить асинхронный дочерний процесс?

Пример

import asyncio
import sys

async def main():
    process = await asyncio.create_subprocess_exec(
        sys.executable, 'async_child.py',
        stdout=asyncio.subprocess.PIPE,
        stderr=asyncio.subprocess.PIPE
    )
    stdout, stderr = await process.communicate()
    print('stdout:', stdout.decode())
    if stderr:
        print('stderr:', stderr.decode())

asyncio.run(main())

Содержимое файла async_child.py:

Пример

# async_child.py
print('async child')
stdout: async child

Модуль asyncio позволяет встраивать запуск других скриптов в событийный цикл приложения.

Как выполнить файл в режиме оптимизации?

Пример

assert 1 == 2, 'Ошибка в assert'
print('Оптимизация исключила проверку')
Пример
python -O optimize_demo.py
Оптимизация исключила проверку

Параметр -O удаляет инструкции assert и устанавливает __debug__ равным False.

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

Пример

import warnings

warnings.warn('Устаревший вызов', DeprecationWarning)
Пример
python -X dev dev_warning.py
dev_warning.py:2: DeprecationWarning: Устаревший вызов

Параметр -X dev включает дополнительные проверки памяти и предупреждения Python.

Запуск .py файла в Python - comments

En
Python run py file (python)