簡體   English   中英

如何在子程序完成運行之前終止Python程序?

[英]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完成執行才真正退出(這不是我想要發生的事情)。 還有另一種方法嗎?

看來您想將系統調用分離到另一個線程。

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進程退出時,它不會終止生成的子進程,因為它現在是獨立的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM