如何在子程序运行完之前终止Python程序?
问题描述:
我有一个脚本,应该24/7运行,除非中断。这个脚本是脚本A. 我希望脚本A调用脚本B,并且脚本A在B运行时退出。这可能吗? 这就是我想会的工作如何在子程序运行完之前终止Python程序?
#script_A.py
while(1)
do some stuff
do even more stuff
if true:
os.system("python script_B.py")
sys.exit(0)
#script_B.py
time.sleep(some_time)
do something
os.system("python script_A.py")
sys.exit(0)
但它好像一个实际上不退出,直到B已经执行完毕(这不是我希望发生的)。 有没有另一种方法来做到这一点?
答
你所描述听起来很像一个函数调用:
def doScriptB():
# do some stuff
# do some more stuff
def doScriptA():
while True:
# do some stuff
if Your Condition:
doScriptB()
return
while True:
doScriptA()
如果这还不够你,那么你必须从你的Python进程分离的过程。这通常包括产卵的处理的背景下,这是由在bash追加与号的命令来完成:
yes 'This is a background process' &
和拆卸所述从当前的外壳,其中在简单的C程序由分叉完成过程该过程两次。我不知道如何在Python中做到这一点,但会打赌,有一个模块。
这样,当调用python进程退出时,它不会终止产生的子进程,因为它现在是独立的。
答
看来你想分离系统调用另一个线程。
script_A.py
import subprocess
import sys
while(1)
do some stuff
do even more stuff
if true:
pid = subprocess.Popen([sys.executable, "python script_B.py"]) # call subprocess
sys.exit(0)
反正它似乎不是一个很好的做法都没有。为什么不尝试脚本A监听Process Stack,如果它发现脚本B正在运行,则停止。这是你如何做到的另一个例子。
import subprocess
import sys
import psutil
while(1)
#This sections queries the current processes running
for proc in psutil.process_iter():
pinfo = proc.as_dict(attrs=['pid', 'name'])
if pinfo[ 'name' ] == "script_B.py":
sys.exit(0)
do some stuff
do even more stuff
if true:
pid = subprocess.Popen([sys.executable, "python script_B.py"]) # call subprocess
sys.exit(0)
尝试使用'os.system(“python script_B.py&”)'在后台启动您的B脚本。 – Alfe
os.system是同步的。 – Marichyasana