[英]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.