Честно говоря, вам, вероятно, вообще не следует использовать exec
, но, если вы это сделаете, exec
все еще работает в том же процессе и потоке, что и ваша основная программа, нет выхода из него, не убив основную программу.
Вы должны открыть его в другом процессе, подпроцессе или потоке. Поскольку ваш exec
, похоже, выполняет код Python, вы можете просто использовать:
from subprocess import Popen
p = Popen(['python', filename'])
И затем он работает в фоновом режиме, ваш обычный процесс продолжается, и вы можете убить его в любой момент с помощью.
p.kill()
Это усложняется, если вы хотите, чтобы этот процесс вводил данные или считывал их результаты, но это вопрос другого вопроса. Вы можете начать здесь, чтобы увидеть, как читать выходные данные: Сохранить выходные данные subprocess.Popen в строке
Небольшой пример для получения выходных данных будет выглядеть примерно так:
from subprocess import Popen, PIPE
p = Popen(['python', filename], stdout=PIPE, stderr=PIPE)
output, errors = p.communicate()
Однако это будет ждать, пока процесс завершит свою работу, поэтому, возможно, запустите все это из другого потока или найдите другой способ получить выходные данные (возможно, в файл журнала)
Обратите внимание, что я использовалпросто 'python'
в Popen
, если исполняемый файл python отсутствует в вашем пути или имеет другое имя, вы должны заменить его на полный путь к исполняемому файлу