执行另一个python脚本,然后关闭当前脚本

执行另一个python脚本,然后关闭当前脚本,python,subprocess,sys,Python,Subprocess,Sys,我有一个python脚本script_a.py,它使用subprocess.call()执行另一个脚本script_b.py,作为结束前的最后一条指令。我需要script_b.py等待script_a.py关闭,然后再继续执行它自己的指令。为此,我在script_b.py中使用了while循环。我该怎么做?我目前尝试的所有解决方案都是script_a.py等待script_b.py完成后再关闭。我觉得这可能涉及到atexit()或类似的东西,但我迷路了 非常感谢 您的脚本将是: import s

我有一个python脚本
script_a.py
,它使用
subprocess.call()
执行另一个脚本
script_b.py
,作为结束前的最后一条指令。我需要
script_b.py
等待
script_a.py
关闭,然后再继续执行它自己的指令。为此,我在
script_b.py
中使用了while循环。我该怎么做?我目前尝试的所有解决方案都是
script_a.py
等待
script_b.py
完成后再关闭。我觉得这可能涉及到
atexit()
或类似的东西,但我迷路了


非常感谢

您的脚本将是:

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

#continue doing stuff

你可以做一些完全骇人听闻的废话

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
import atexit
atexit.register(lambda *a:open("a.done","w"))
脚本a.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
import atexit
atexit.register(lambda *a:open("a.done","w"))

或者,不要用Popen来代替

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

听起来你使用了错误的结构。。。我想你想要的是
os.exec*
而不是
子进程
…明白了。如果
script_b.py
在其内部定义了需要运行的所有内容,那么在exec*函数强制我传递的参数列表中,我应该传递什么呢?您可能只需要传递[“python”,“script_b.py”]。。。我已经有一段时间没有这样做了…这个脚本在哪里关闭?这样子进程p就可以完成它的工作了?对不起,我是从另一个角度读的。如果a在最后一条指令中调用b,而b需要等待a完成,则会有一个无限循环。只需使用另一个脚本c调用a,然后调用b。有什么原因不能这样做吗?所以没有办法强迫脚本a继续执行其下一条指令(即
sis.exit()
),不管脚本b何时完成?请使用同时调用这两条指令的脚本c。