如何在子 运行 完成之前终止 Python 程序?
How to Terminate a Python program before its child is finished running?
我有一个脚本应该 运行 24/7 除非被打断。这个脚本是脚本A。
我希望脚本 A 调用脚本 B,并在 B 处于 运行ning 时让脚本 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 完成执行后才真正退出(这不是我想要发生的)。
还有其他方法吗?
您似乎想将系统调用分离到另一个线程。
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 侦听进程堆栈,如果它找到脚本 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 进程退出时,它不会终止生成的子进程,因为它现在是独立的。
我有一个脚本应该 运行 24/7 除非被打断。这个脚本是脚本A。 我希望脚本 A 调用脚本 B,并在 B 处于 运行ning 时让脚本 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 完成执行后才真正退出(这不是我想要发生的)。 还有其他方法吗?
您似乎想将系统调用分离到另一个线程。
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 侦听进程堆栈,如果它找到脚本 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 进程退出时,它不会终止生成的子进程,因为它现在是独立的。