Выполнение Python скрипта из другого Python скрипта с визуальной составляющей

Сначала вводные данные: Есть 6 Python скриптов каждый из них в данный момент запускает по строгой необходимости через терминал, 4 из них не требуют общения с пользователем, просто тихо-мирно выполняют парочку не сложных задач. И есть 2 скрипта которые генерируют условный конфиг файл, но при генерации он задает вопросы и на них надо отвечать. Грубо говоря "Укажите адрес действующего сервера MongoDB" в терминале необходимо ввести эти данные (Банальный MGDB = inpunt() ) и так буквально раз 10 надо вводить что-то с клавиатуры в режиме терминала. Сейчас встал вопрос о необходимости единого центра управления этими скриптами.

Т.е запускаем start.py и там уже надо сделать запуск этих самых скриптов. Но как запустит из одного скрипта другой в интерактивном режиме? Т.е запускаем условный start.py, а из него MongoDB.py, который уже уже требует ввода данных и режим терминала. Как возможно это реализовать? Заранее благодарю, как минимум за прочтение этого C:


Ответы (1 шт):

Автор решения: alex

все зависит от ситуации. например в запускаемом скрипте забили на __main__ и он выглядит примерно так

script.py

a = input("enter")
print("a")

то наш start.py будет выглядеть так start.py

import script

Когда мы делаем импорт некоторый код будет выполнен. Тот который не спрятан в метод.

А если не забили на __main__?

script.py

if __name__ == '__main__':
    a = input("enter")
    print("a")

То запустить его можно так

from pathlib import Path

if __name__ == '__main__':
    code = compile(Path("script.py").read_text(), "script.py", "exec")
    exec(code, {"__name__": "__main__"})

Ну и subprocess конечно же

import sys
from subprocess import call


if __name__ == '__main__':
    call(f"{sys.executable} script.py", shell=True)

Ну и еще можно os.system

import sys
import os


if __name__ == '__main__':
    os.system(f"{sys.executable} script.py")
→ Ссылка