Выполнение Python скрипта из другого Python скрипта с визуальной составляющей
Сначала вводные данные: Есть 6 Python скриптов каждый из них в данный момент запускает по строгой необходимости через терминал, 4 из них не требуют общения с пользователем, просто тихо-мирно выполняют парочку не сложных задач. И есть 2 скрипта которые генерируют условный конфиг файл, но при генерации он задает вопросы и на них надо отвечать. Грубо говоря "Укажите адрес действующего сервера MongoDB" в терминале необходимо ввести эти данные (Банальный MGDB = inpunt() ) и так буквально раз 10 надо вводить что-то с клавиатуры в режиме терминала. Сейчас встал вопрос о необходимости единого центра управления этими скриптами.
Т.е запускаем start.py и там уже надо сделать запуск этих самых скриптов. Но как запустит из одного скрипта другой в интерактивном режиме? Т.е запускаем условный start.py, а из него MongoDB.py, который уже уже требует ввода данных и режим терминала. Как возможно это реализовать? Заранее благодарю, как минимум за прочтение этого C:
Ответы (1 шт):
все зависит от ситуации. например в запускаемом скрипте забили на __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")