Выполнение Python скриптов и модулей: практическое руководство
Основные и альтернативные подходы к запуску
Как наиболее эффективно запустить Python скрипт из командной строки?
Самый распространенный и универсальный способ - вызов интерпретатора с именем файла:
python script.pyPython 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, предотвращая ошибки при выводе национальных символов.