我想从类中的另一个函数中杀死一个进程,这个函数是由另一个函数启动的。这是一个例子:
import time
class foo_class:
global foo_global
def foo_start(self):
import subprocess
self.foo_global =subprocess.Popen(['a daemon service'])
def foo_stop(self):
self.foo_start.foo_global.kill()
self.foo_start.foo_global.wait()
foo_class().foo_start()
time.sleep(5)
foo_class().foo_stop()
我该如何定义foo_stop?
答案 0 :(得分:2)
我猜你想要这样的东西:
import subprocess
import time
class foo_class(object):
def __init__(self):
self.foo = None
def start(self):
self.stop()
self.foo = subprocess.Popen(['a daemon service'])
self.foo.start()
def stop(self):
if self.foo:
self.foo.kill()
self.foo.wait()
self.foo = None
foo = foo_class()
foo.start()
time.sleep(5)
foo.stop()
我改变了一些事情:
object
。foo_class
的新实例。相反,您希望创建一个实例并在其上调用方法。答案 1 :(得分:2)
jterrace代码有效。如果你不希望它在初始化时启动,只需在一个单独的函数中调用Popen并将任何内容传递给init函数
import subprocess
import time
class foo_class(object):
def __init__(self):
pass
def start(self):
self.foo = subprocess.Popen(['a daemon service'])
def stop(self):
self.foo.kill()
self.foo.wait() #don't know if this is necessary?
def restart(self):
self.start()
foo = foo_class()
foo.start()
time.sleep(5)
foo.stop()