Открытие нескольких файлов py
Есть файл 1.py,2.py,3.py. Их можно запустить через .bat, но нужно запускать через другой файл .py
Каким образом можно выполнить следующую задачу:
запускаем файл 1.py
запускаем файл 2.py
запускаем файл 3.py
if (если какой то файл закрылся сам из-за какой-то ошибки или чего-то еще (пользователь закрыл), то ):
print(такой то файл закрылся)
Как видите, нужно открыть сразу несколько файлов и получить уведомление об закрытии любого из них, если это произойдет. Нагуглил разные способы открытия через сторонние библиотеки, но хочется конечно посмотреть как реализовать более удачно. Открытие всех 1,2,3 py происходит в консоли, отдельно для каждого файла. То есть в основной код никакая информация из них браться не будет.
Ответы (3 шт):
Я тут углубляюсь в асихронный фреймворк - так что вот
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()
пример опроса программы
Предлагаю два метода. Для демонстрации используем три консольных скрипта:
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")