diff options
author | Steven Silvester | 2014-07-31 06:17:17 -0500 |
---|---|---|
committer | Steven Silvester | 2014-07-31 06:17:17 -0500 |
commit | efb8f40e8ef92a2f3e230d0559411936681d7b05 (patch) | |
tree | c415778753dd041bd63477515158d52a2737f67d /octave_kernel.py | |
parent | 78b52b4e29f3c2500b304a2141b4e3df73730587 (diff) | |
download | scilab_kernel-efb8f40e8ef92a2f3e230d0559411936681d7b05.tar.gz scilab_kernel-efb8f40e8ef92a2f3e230d0559411936681d7b05.tar.bz2 scilab_kernel-efb8f40e8ef92a2f3e230d0559411936681d7b05.zip |
Improved error handling, interrupt handling.
Diffstat (limited to 'octave_kernel.py')
-rw-r--r-- | octave_kernel.py | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/octave_kernel.py b/octave_kernel.py index 76aa4a3..fbb1efe 100644 --- a/octave_kernel.py +++ b/octave_kernel.py @@ -1,5 +1,5 @@ from IPython.kernel.zmq.kernelbase import Kernel -from oct2py import octave +from oct2py import octave, Oct2PyError import signal from subprocess import check_output @@ -46,17 +46,28 @@ class OctaveKernel(Kernel): if code.strip() == 'exit': # TODO: exit gracefully here - + pass interrupted = False try: output = self.octavewrapper._eval([code.rstrip()]) except KeyboardInterrupt: self.octavewrapper._session.proc.send_signal(signal.SIGINT) interrupted = True - # TODO: handle the output - output = 'Interrupted' - #self.bashwrapper._expect_prompt() - #output = self.bashwrapper.child.before + output = 'Octave Session Interrupted' + except Oct2PyError as e: + err = str(e) + if 'Octave returned:' in err: + err = err[err.index('Octave returned:'):] + err = err[len('Octave returned:'):].lstrip() + stream_content = {'name': 'stdout', 'data': err} + self.send_response(self.iopub_socket, 'stream', stream_content) + return {'status': 'error', 'execution_count': self.execution_count, + 'ename': '', 'evalue': err, 'traceback': []} + + if output is None: + output = '' + elif output == 'Octave Session Interrupted': + interrupted = True if not silent: stream_content = {'name': 'stdout', 'data': output} @@ -65,19 +76,8 @@ class OctaveKernel(Kernel): if interrupted: return {'status': 'abort', 'execution_count': self.execution_count} - try: - # TODO: handle an exit code - exitcode = 0 - #exitcode = int(self.run_command('echo $?').rstrip()) - except Exception: - exitcode = 1 - - if exitcode: - return {'status': 'error', 'execution_count': self.execution_count, - 'ename': '', 'evalue': str(exitcode), 'traceback': []} - else: - return {'status': 'ok', 'execution_count': self.execution_count, - 'payload': [], 'user_expressions': {}} + return {'status': 'ok', 'execution_count': self.execution_count, + 'payload': [], 'user_expressions': {}} if __name__ == '__main__': from IPython.kernel.zmq.kernelapp import IPKernelApp |