2016-07-21 4 views
2

У меня есть сценарий python script_a.py, который использует subprocess.call(), который выполняет другой скрипт script_b.py как последнюю инструкцию перед завершением. Мне нужно script_b.py, чтобы подождать, пока script_a.py не закроется, прежде чем приступить к выполнению своих собственных инструкций. Для этого я использую цикл while в пределах script_b.py. Как я могу это сделать? Все мои текущие решения, которые я пробовал, имеют script_a.py до тех пор, пока script_b.py не будет закрыт. У меня такое чувство, что это может быть связано с atexit() или чем-то подобным, но я потерян.Выполнить другой скрипт python, а затем закрыть текущий скрипт

Большое спасибо!

+0

это звучит, как вы используете неправильную конструкцию ... Я думаю, что вы хотите 'os.exec *' вместо 'subprocess' ... –

+0

Got Это. В случае, если 'script_b.py' имеет все, что ему нужно для выполнения, определено внутри себя, то что я ожидаю передать в списке аргументов, которые функции exec * заставляют меня проходить? – Alt182

+0

, вы, вероятно, можете просто передать ["python", "script_b.py"] ... это было некоторое время, так как я сделал это ... –

ответ

1

вы могли бы сделать некоторые полностью Hacky дерьмо

script_b.py

while not os.path.exists("a.done"):pass 
time.sleep(0.2) # a little longer just to be really sure ... 
os.remove("a.done") 
... # rest of script b 

script_a.py

import atexit 
atexit.register(lambda *a:open("a.done","w")) 

или вместо Popen просто сделать

os.execl("/usr/bin/python","script_b.py") 
1

Ваш script_a.py будет:

import subprocess 
#do whatever stuff you want here 
p = subprocess.Popen(["python","b.py"]) 
p.wait() 
p.terminate() 

#continue doing stuff 
+0

Где это закрывает 'script_a.py', поэтому подпроцесс p может выполнять свои Работа? – Alt182

+0

Извините, я прочитал это наоборот. Если _a_ вызывает _b_ в последней инструкции, а b нужно подождать, пока закончите, у вас будет бесконечный цикл. Просто используйте другой скрипт _c_, который вызывает _a_, а затем _b_. Почему вы не можете этого сделать? – Javier

+0

Таким образом, нет возможности принудительно запустить script_a с его следующей инструкцией (которая является 'sis.exit()' независимо от того, закончится ли script_b? – Alt182

Смежные вопросы