Выполнение Python скриптов и модулей: практическое руководство

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

Основные и альтернативные подходы к запуску

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

Самый распространенный и универсальный способ - вызов интерпретатора с именем файла:

python script.py

Python run exe (запуск скриптов и модулей python)

Для явного указания версии Python на системах с несколькими версиями используется python3 (Linux/macOS) или py (Windows).

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

Пример с передачей аргументов:

python script.py --input data.txt --output result.txt

Внутри скрипта аргументы доступны через sys.argv. При использовании argparse можно легко обрабатывать именованные параметры.

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

  • python не является внутренней или внешней командой - добавьте путь к интерпретатору в переменную PATH
  • ModuleNotFoundError - используйте виртуальное окружение или установите зависимости через pip
  • SyntaxError - проверьте версию Python; код может быть написан под Python 3, а интерпретатор Python 2

Решение: для Windows настройте PATH через Системные переменные среды; для Linux/macOS убедитесь, что python3 есть в /usr/bin/ или используйте полный путь.

Как запустить модуль как главный скрипт (python -m)?

Команда python -m module_name выполняет код, находящийся в блоке if __name__ == "__main__": указанного модуля. Удобно для встроенных модулей (http.server, venv) и пакетов.

python -m http.server 8080

Запускает простой HTTP сервер на порту 8080. Аналогичный подход используется для запуска сценариев внутри пакетов.

Проблема: модуль не найден, если он не установлен или не находится в sys.path. Решение: установите пакет через pip или выполните команду из директории, где находится модуль.

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

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

Инструменты вроде PyInstaller, cx_Freeze или Nuitka упаковывают Python код в автономный исполняемый файл. Запуск производится как обычного приложения:

myapp.exe --option value

На Windows можно просто дважды кликнуть по файлу. Если exe требует консоли (флаг --console), то вывод будет виден в командной строке.

Ошибки: антивирус блокирует exe (PyInstaller генерирует сигнатуры). Решение: подписать код, добавить в исключения. Недостающие библиотеки (DLL) - требуется сборка с опцией --onefile или указание путей.

Цель: распространение приложения конечным пользователям без необходимости установки Python.

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

Модуль subprocess позволяет запускать внешние команды, включая интерпретатор Python. Пример:

import subprocess
subprocess.run(["python", "other_script.py", "arg1"])

Более старый os.system тоже работает, но не дает гибкости управления выводом.

Для чтения вывода:

result = subprocess.run(["python", "calc.py"], capture_output=True, text=True)
print(result.stdout)

Проблема: дочерний процесс может зависнуть. Решение: установить тайм-аут через параметр timeout или использовать Popen с последующим wait.

Цель: создание лаунчеров, автоматизация запуска нескольких скриптов, интеграция с системой.

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

В Linux/macOS используется символ & в конце команды:

python long_task.py &

В Windows - команда start:

start /B python long_task.py

Ключ /B означает без создания нового окна.

Проблема: после закрытия терминала процесс может завершиться. Решение: использовать nohup (Linux) или запускать как службу Windows.

Цель: выполнение длительных операций, серверных процессов, не требующих интерактивного ввода.

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

Пример 1: Запуск скрипта с перенаправлением ввода/вывода

Команда перенаправляет вывод в файл, а ошибки - в другой файл:

Пример
python process_data.py < input.txt > output.log 2> errors.log
# После выполнения в текущей директории появятся output.log и errors.log

Это полезно для автоматизации, когда скрипт читает данные из стандартного ввода.

Пример 2: Параллельный запуск нескольких скриптов через subprocess.Popen

Пример
import subprocess, time

scripts = ["script1.py", "script2.py", "script3.py"]
procs = []
for scr in scripts:
    p = subprocess.Popen(["python", scr])
    procs.append(p)

# Дожидаемся завершения всех
for p in procs:
    p.wait()
print("Все скрипты завершены")
# Каждый скрипт выполняется параллельно. Вывод может перемешиваться.
# После завершения всех - печатается сообщение.

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

Пример 3: Запуск exe с расширенными параметрами и захватом вывода

Пример
import subprocess

cmd = ["myapp.exe", "--verbose", "--output", "result.json"]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
stdout, stderr = proc.communicate(timeout=30)
if proc.returncode == 0:
    print("Успешно. Вывод:\n" + stdout)
else:
    print("Ошибка:\n" + stderr)
# Если myapp.exe завершится успешно, будет выведен stdout.
# Иначе - stderr.

Важно использовать communicate для избежания deadlock при большом объеме вывода.

Пример 4: Использование argparse для создания CLI с автодокументацией

Пример
# script_with_args.py
import argparse

parser = argparse.ArgumentParser(description="Обработка файла")
parser.add_argument("-i", "--input", required=True, help="Входной файл")
parser.add_argument("-o", "--output", default="out.txt", help="Выходной файл")
parser.add_argument("--verbose", action="store_true", help="Подробный вывод")

args = parser.parse_args()
print(f"Обработка {args.input} -> {args.output}")
if args.verbose:
    print("Режим verbose включен")

Запуск:

Пример
python script_with_args.py -i data.csv -o report.txt --verbose
Обработка data.csv -> report.txt
Режим verbose включен

Аргументы можно комбинировать, а --help выведет справку автоматически.

Пример 5: Запуск python -m с передачей аргументов в модуль

Встроенный модуль json.tool форматирует JSON:

Пример
echo '{"name":"test"}' | python -m json.tool
{
    "name": "test"
}

Аналогично можно запускать собственные модули, если они реализованы по правилам пакетов (с __main__.py).

Пример 6: Создание и запуск exe с PyInstaller с последующей проверкой

Пример
# Сборка
pyinstaller --onefile --console my_script.py
# В Windows появится dist/my_script.exe
# Запуск с аргументами:
dist\my_script.exe --config config.json
# При успешном запуске скрипт выполнится, вывод появится в командной строке.

Для GUI приложений используйте --windowed вместо --console.

Пример 7: Запуск с указанием кодировки и переменных окружения

Пример
# Windows
chcp 65001 && set PYTHONIOENCODING=utf-8 && python script.py
# Linux/macOS
export PYTHONIOENCODING=utf-8 && python script.py
# Устанавливает кодировку консоли и интерпретатора в UTF-8, предотвращая ошибки при выводе национальных символов.

Запуск скриптов и модулей Python - comments

En
Python run exe (python)