繁体   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