我有一个脚本应该全天候运行,除非被打断。这个脚本是脚本A. 我希望脚本A调用脚本B,并在B运行时让脚本A退出。这可能吗? 这是我认为可行的
#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)
但似乎A在B完成执行之前并没有真正退出(这不是我想要发生的事情)。 还有另一种方法吗?
答案 0 :(得分:0)
您似乎想要将系统调用分离到另一个线程。
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侦听进程堆栈,如果发现脚本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)
答案 1 :(得分:0)
你所描述的内容听起来很像函数调用:
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' &
将当前shell中的所述进程分离,在一个简单的C程序中,通过将进程分叉两次来完成。我不知道如何在python中这样做,但是打赌,有一个模块用于此。
这样,当调用python进程退出时,它不会终止生成的子进程,因为它现在是独立的。