Открытие нескольких файлов py

Есть файл 1.py,2.py,3.py. Их можно запустить через .bat, но нужно запускать через другой файл .py

Каким образом можно выполнить следующую задачу:

запускаем файл 1.py
запускаем файл 2.py
запускаем файл 3.py

if (если какой то файл закрылся сам из-за какой-то ошибки или чего-то еще (пользователь закрыл), то ):
   print(такой то файл закрылся)

Как видите, нужно открыть сразу несколько файлов и получить уведомление об закрытии любого из них, если это произойдет. Нагуглил разные способы открытия через сторонние библиотеки, но хочется конечно посмотреть как реализовать более удачно. Открытие всех 1,2,3 py происходит в консоли, отдельно для каждого файла. То есть в основной код никакая информация из них браться не будет.


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

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

Я тут углубляюсь в асихронный фреймворк - так что вот

import asyncio
import sys

SCRIPTS = [
    'script1.py',
    'script2.py',
    'script3.py'
]

async def waiter(sc, p):
    "Функция которая вернет имя скрипта после ожидания"
    await p.wait()
    return sc, p


async def main():
    waiters  = []
    
    # Запуск
    for sc in SCRIPTS:
        p = await asyncio.create_subprocess_exec(sys.executable, sc)
        print('Started', sc)
        waiters.append(asyncio.create_task(waiter(sc, p)))

    # Ожидание
    while waiters:
        done, waiters = await asyncio.wait(waiters, return_when=asyncio.FIRST_COMPLETED)
        for w in done:
            sc,p = await w
            print('Done', sc)
        
      
if __name__ == "__main__":
    asyncio.run(main())
    
→ Ссылка
Автор решения: Лев Малюгин

попробуй использовать subprocess, там как раз можно из пайтона запускать что-то стороннее и узнавать, в каком состоянии эта программа(открыта или закрыта)

import subprocess
subprocess.Popen("C:/example/file.txt")

это пример запуска программы

Popen.poll()

пример опроса программы

→ Ссылка
Автор решения: Fox Fox

Предлагаю два метода. Для демонстрации используем три консольных скрипта:

proba0.py:

print("Hello, world!")

proba1.py:

import os
exec(open("proba0.py").read())
os.system("pause")

proba2.py:

import os
import subprocess
subprocess.run(["python", "proba0.py"])
os.system("pause")
→ Ссылка