[英]How to Terminate a Python program before its child is finished running?
我有一个脚本,除非被打断,否则应该以24/7运行。 该脚本是脚本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完成执行才真正退出(这不是我想要发生的事情)。 还有另一种方法吗?
看来您想将系统调用分离到另一个线程。
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)
您所描述的听起来很像一个函数调用:
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进程退出时,它不会终止生成的子进程,因为它现在是独立的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.