class ShotRunnerController(QtCore.QThread): def __init__(self, scripts, settingsFiles, logWindow): QtCore.QThread.__init__(self) self.scripts = scripts self.settingsFiles = settingsFiles self.logWindow = logWindow self.scriptRunner = None def run(self): for script, settingsFile in zip(self.scripts, self.settingsFiles): self.scriptRunner = ScriptRunner(script) scriptDir = os.path.dirname(script) #shutil.copyfile(settingsFile, os.path.join(scriptDir, AutoConfigLoader.SETTINGS_FILE_NAME)) shutil.copyfile(settingsFile, AutoConfigLoader.SETTINGS_FILE_NAME) signal = StringSignal() signal.get().connect(self.logWindow.appendMessage) outputReader = StandardOutputReader(self.scriptRunner, signal) errorReader = StandardErrorReader(self.scriptRunner, signal) self.scriptRunner.executeAsync() outputReader.start() errorReader.start() self.scriptRunner.wait() outputReader.wait() errorReader.wait() def terminate(self): if self.scriptRunner: self.scriptRunner.process.terminate() QtCore.QThread.terminate(self)
def test_executeCapturesStderr(self): script = "raise Exception('foo')" with open(self.tempFile, 'w') as f: f.write(script) runner = ScriptRunner(self.tempFile) _, err = runner.execute() self.assertTrue('Exception: foo' in err)
def test_executeCapturesStdout(self): script = "print 'Foobar'" with open(self.tempFile, 'w') as f: f.write(script) runner = ScriptRunner(self.tempFile) out, _ = runner.execute() self.assertEqual('Foobar\n', out)
def test_canExecuteAsync(self): script = "print 'Foobar'" with open(self.tempFile, 'w') as f: f.write(script) runner = ScriptRunner(self.tempFile) runner.executeAsync() out, _ = runner.join() self.assertEqual('Foobar\n', out)
def test_canGetErrorStream(self): script = "raise Exception('foo')" with open(self.tempFile, 'w') as f: f.write(script) runner = ScriptRunner(self.tempFile) runner.executeAsync() self.assertTrue(any('Exception: foo' in line for line in runner.errorStream())) runner.join()
def test_canGetOutputStream(self): script = "print 'Foobar'" with open(self.tempFile, 'w') as f: f.write(script) runner = ScriptRunner(self.tempFile) runner.executeAsync() out = runner.outputStream().next() self.assertEqual('Foobar\n', out) runner.join()
def run(self): for script, settingsFile in zip(self.scripts, self.settingsFiles): self.scriptRunner = ScriptRunner(script) scriptDir = os.path.dirname(script) #shutil.copyfile(settingsFile, os.path.join(scriptDir, AutoConfigLoader.SETTINGS_FILE_NAME)) shutil.copyfile(settingsFile, AutoConfigLoader.SETTINGS_FILE_NAME) signal = StringSignal() signal.get().connect(self.logWindow.appendMessage) outputReader = StandardOutputReader(self.scriptRunner, signal) errorReader = StandardErrorReader(self.scriptRunner, signal) self.scriptRunner.executeAsync() outputReader.start() errorReader.start() self.scriptRunner.wait() outputReader.wait() errorReader.wait()