в python у меня есть порожденный процесс оболочки, который я могу остановить вручную, или он может завершиться сам, когда захочет. могу ли я получить уведомление о том, что оно завершено, не опрашивая его все время?
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
в случае нормального завершения, или это вообще глупый дизайн?