如何使用外部变量中断和停止正在运行的进程

时间:2018-12-12 20:46:06

标签: python

我一般对python和代码都很陌生,所以请多多包涵。

我有一些代码可以运行并播放文件列表(例如,在itunes播放列表中)。我需要能够通过切换发送的按钮/变量来停止并重新开始循环来自touchosc。

该循环将触发并正常运行,但是如果不点击ctrl-c,我将无法使其停止。问题似乎是,当循环运行时,我的程序将不会使用新值更新“ loop”变量,以便在将其更改为0时停止该进程。使它工作的方法。这些包括while循环和线程化(超出我的范围)。如果有人能指出我正确的方向,将不胜感激!另外请原谅我的hacky代码-r,s,sp和sr标志主要用于程序的另一部分正常工作,因此我可以确保在录制或触发不同的播放文件时杀死进程,以避免重载CPU,如果我要同时记录到同一文件并从同一文件播放,也要避免反馈。如果您有关于如何使这种感觉更好的指示,但我真的只想立即解决主要问题。

代码如下:

from OSC import OSCServer,OSCClient, OSCMessage
import sys
from time import sleep
import time
import types
import os
import subprocess

server = OSCServer( ("10.1.1.143", 7002) )#This has to be the IP of the RaspberryPi on the network
client = OSCClient()

r = None
p = None
sr = 0
sp = 0
loop = 0

def playall(path, tags, args, source):
        global sp
        global p
        global sr
        global r
        global loop
        loop = int(args[0])
        if loop == 1:
            print "Play on Loop";
         for x in range(1,10):
            i = ""
            i = str(x)
            print "Loop Duration", loop;
            if sp == 0:
                        if sr == 0:
                            p = subprocess.Popen(['ola_recorder', '-p', i, '-i 0'], stdout=subprocess.PIPE)
                            sp = 1

                        else:
                            r.kill()
                            p = subprocess.Popen(['ola_recorder', '-p', i, '-i 0'], stdout=subprocess.PIPE)
                            sp = 1
                            sr = 0

            else:
                if sr == 0:
                    p.kill()
                    p = subprocess.Popen(['ola_recorder', '-p', i, '-i 0'], stdout=subprocess.PIPE)
                    sp = 1

                else:
                    p.kill()
                    r.kill()
                    p = subprocess.Popen(['ola_recorder', '-p', i, '-i 0'], stdout=subprocess.PIPE)
                    sp = 1
                    sr = 0
            time.sleep(5)
            if loop == 0:
                break

server.addMsgHandler("/3/playall", playall)

while True:
    server.handle_request()

server.close()

0 个答案:

没有答案