将subprocess.Popen与python一起使用时如何结束子进程?

时间:2018-08-06 10:58:06

标签: python popen

我使用一个脚本来运行两个脚本。像这样的代码:

import subprocess

subprocess.Popen("python a.py", shell=True)
subprocess.Popen("python b.py", shell=True)

但是如果我结束主脚本,则a.py和b.py的子进程仍在运行。如何解决?

已添加:

a.py和b.py是两个服务器脚本。当我使用ctrl + c结束主脚本时,两个服务器都没有结束。那么,当我结束主脚本时如何结束所有进程?

1 个答案:

答案 0 :(得分:3)

通过终止进程。

import subprocess

p1 = subprocess.Popen("python a.py", shell=True)
p2 = subprocess.Popen("python b.py", shell=True)

# ... do things ...

p1.kill()
p2.kill()

您还可以使用atexit模块自动完成此操作:

import subprocess
import atexit

p1 = subprocess.Popen("python a.py", shell=True)
p2 = subprocess.Popen("python b.py", shell=True)
atexit.register(p1.kill)  # register for killing
atexit.register(p2.kill)

# ... do things ...