使用Python启动和停止子流程
我试图通过使用Python启动和停止子流程,python,Python,我试图通过MQTT命令启动和停止设备上的程序,但它并没有按照我所希望的方式工作 要开始此过程,我将使用: p = subprocess.Popen(["sh", "process.sh"]) 这很好,它启动了程序 在代码的下一行,我试图用p.kill或p.terminate终止/终止程序,但它返回代码: p.terminate() UnboundLocalError: local variable 'p' referenced before assignment 我使用的代码是我自己的,如下
MQTT
命令启动和停止设备上的程序,但它并没有按照我所希望的方式工作
要开始此过程,我将使用:
p = subprocess.Popen(["sh", "process.sh"])
这很好,它启动了程序
在代码的下一行,我试图用p.kill
或p.terminate
终止/终止程序,但它返回代码:
p.terminate()
UnboundLocalError: local variable 'p' referenced before assignment
我使用的代码是我自己的,如下所示:
def on_message(client, userdata, msg):
if msg.payload == "start":
p = subprocess.Popen(["sh", "stream.sh"])
if msg.payload == "stop":
p.terminate()
你必须把p定义为全局的
def on_message(...):
global p
如果消息上的
是回调函数,则它不记得以前的调用。您需要将对p
的引用存储在某个地方,并在随后的函数调用中检索它。如果您想进一步了解发生此问题的原因,请仔细阅读。
p = None
def on_message(client, userdata, msg):
global p
if msg.payload == "start":
p = subprocess.Popen(["sh", "stream.sh"])
if msg.payload == "stop" and p:
p.terminate()