from subprocess import * from threading import Thread import time class Modell(Thread): PATH_OV = 'meta/dist/designer-Release/openvibe-designer.sh' PATH_FILES = 'Projekte/OpenViBE_visual_BCI-master/openvibe_visual_bci/' def __init__(self,c): Thread.__init__(self) self.controller = c self.aktiv= True def stop(self): print("stop") self.aktiv = False def setFunktion(self, func, args=None, kwargs=None): self.func = func self.args = args or [] self.kwargs = kwargs or {} def run(self): #self.aktiv = True t = Thread(target=self.func, args=self.args, kwargs=self.kwargs) t.setDaemon(True) t.start() while self.aktiv: time.sleep(0.1) def startCopySpelling(self): print("start copySpelling") path = self.PATH_FILES + 'p300-visual-1-acquisition.xml' process = Popen(['bash', self.PATH_OV, '--play', path, '--no-gui'], stdout=PIPE, universal_newlines=True) while True: output = process.stdout.readline() print(output.strip()) x = output.find("schlagwort?") if(x != -1): print("Training finished") process.terminate() break self.killProzess() self.controller.filterXdawn() def trainXDawn(self): print("start training Xdawn") self.controller.setTitle("start training with Xdawn") self.controller.setInfos("This may take a while") print("test") path = self.PATH_FILES + 'p300-visual-2-train-xDAWN.xml' process = Popen(['bash', self.PATH_OV, '--play', path, '--no-gui'], stdout=PIPE, universal_newlines=True) while self.aktiv: output = process.stdout.readline() print(output.strip()) x = output.find("Training finished and saved") if(x != -1): print("Training finished") process.terminate() break self.controller.setInfos("finished Training with xDawn") self.killProzess() #self.controller.filterClassic() def trainClassifier(self): print("start training Classifier") path = self.PATH_FILES + 'p300-visual-3-train-classifier.xml' process = Popen(['bash', self.PATH_OV, '--play', path, '--no-gui'], stdout=PIPE, universal_newlines=True) while True: output = process.stdout.readline() print(output.strip()) x = output.find("schlagwort?") if(x != -1): print("Training finished") process.terminate() break self.killProzess() def freeSpelling(self): print("start freeSpelling") path = self.PATH_FILES + 'p300-visual-4-online.xml' process = Popen(['bash', self.PATH_OV, '--play', path, '--no-gui'], stdout=PIPE, universal_newlines=True) while True: output = process.stdout.readline() print(output.strip()) x = output.find("schlagwort?") if(x != -1): print("End Spelling") process.terminate() break self.killProzess() def killProzess(self): print('start killing') pidOV = 0 pidP = 0 items = [] prozesse = Popen(["ps", "-e"], stdout=PIPE).communicate()[0].strip() zeilen = prozesse.split('\n') for z in zeilen: if(z.find("openvibe-design") != -1): z = z.strip() items = z.split(' ') pidOV = items[0] #kill -TERM veranlasst dem Prozess sich selbst zu beenden (nicht erzwungen) Popen(["kill", "-TERM", pidOV], stdout=PIPE).communicate() print("killed openvibe-designer")