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

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для вызова одного скрипта Python из другого вы можете использовать функцию subprocess.run():

Python
Скопировать код
import subprocess
subprocess.run(["python", "your_script.py"])

Эта команда запустит указанный вами скрипт (your_script.py), так, как если бы вы выполняли его из командной строки.

Кинга Идем в IT: пошаговый план для смены профессии

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

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

Импорт модуля Python

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

Python
Скопировать код
# service.py
import test1  # подключаем модуль test1.py
test1.some_function()  # и вызываем функцию из модуля test1.py

Оба файла должны быть в одном и том же каталоге для возможности относительного импорта.

Проверка, является ли скрипт головной программой

Для того чтобы скрипт мог быть использован как импортируемый модуль или как самостоятельная программа, используйте конструкцию if __name__ == '__main__':

Python
Скопировать код
# test1.py
def main():
    # Ваш код
    pass

if __name__ == '__main__':
    main()  # скрипт запускается непосредственно

Этот подход позволяет контролировать поведение кода в зависимости от способа его использования.

Использование функции exec

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

Python
Скопировать код
exec(open('test1.py').read())  # может быть полезно, но требует аккуратности!

Используйте exec() с осторожностью из-за возможных проблем с безопасностью.

Создание подпроцессов с помощью модуля subprocess

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

Python
Скопировать код
import subprocess
subprocess.call(['python', 'test1.py'])  # "Звонок в скрипту. Ожидаем ответа!"

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

Запуск скриптов с помощью модуля os

Если вы работаете с несложными задачами или нужна поддержка старых версий Python, может понадобиться функция os.system():

Python
Скопировать код
import os
os.system('python test1.py')  # "Я тоже могу быть полезен!"

Для работы с os.system() в системной переменной PATH должен быть прописан путь к интерпретатору Python.

Визуализация

Запуск скрипта можно сравнить с эстафетной гонкой: один скрипт (Script1) передаёт управление (палочку) другому скрипту (Script2), который забирает её и продолжает выполнение команд.

Python
Скопировать код
# Script1.py
import Script2  # передача управления
Python
Скопировать код
# Script2.py
def main():
    print("Стартовал!")

Инкапсуляция логики в функцию main

В грамотно структурированном скрипте должна быть функция main(). Её тоже можно вызвать из другого скрипта:

Python
Скопировать код
# test1.py
def main():
    print("Я в функции main. Нравится?")
    
if __name__ == '__main__':
    main()
Python
Скопировать код
# service.py
import test1
test1.main()  # и мы вызываем эту функцию

Будьте осторожны при вызове других скриптов

При использовании вызова скриптов могут возникнуть определённые сложности...

Обеспечьте уникальность имен

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

Убедитесь в правильности рабочей директории

Местоположение скрипта имеет значение: если интерпретатор Python не обнаруживает скрипт, он не сможет его выполнить.

Правильно используйте импорты

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

Полезные материалы

  1. Модули — Документация Python — детали о модулях в Python.
  2. Выполнение скриптов на Python – Real Python — различные способы запуска кода Python.
  3. Запуск одного скрипта из другого – Stack Overflow — обсуждение методов вызова скриптов на Python.
  4. Автоматизация рутины с помощью Python — практические примеры автоматизации задач.
  5. subprocess — Управление подпроцессами – Документация Python — всё, что нужно знать о модуле subprocess.
  6. Глубокое погружение в систему импорта Python – Real Python — детально о работе с импортами в Python.