【发布时间】:2011-07-11 01:29:44
【问题描述】:
在 python 中,我有一个生成的 shell 进程,我可能会手动停止它,或者它可能会在感觉需要时自行终止。我可以在不一直轮询的情况下收到它已完成的通知吗?
class Foo(object):
def __init__(self):
self.running = False
def start(self):
import os
from subprocess import Popen, PIPE
self.proc = Popen(['foo'], stdout=PIPE, shell=True, preexec_fn=os.setsid)
self.running = True
def stop(self):
if not self.running:
print 'already stopped'
else:
import os, signal
os.killpg(self.proc.pid, signal.SIGINT)
self.on_complete()
def on_complete(self):
self.running = False
结构或多或少类似于上面。我的问题是,如果进程正常终止,而不是我自己的中断,那么self.running 仍然是True,所以我不能依赖该属性来处理类中的其他逻辑。
有没有一种简单的方法可以在正常终止的情况下调用on_complete,或者这首先是一个愚蠢的设计?
【问题讨论】:
标签: python shell signals popen terminate