summaryrefslogtreecommitdiff
path: root/bash_kernel.py
diff options
context:
space:
mode:
authorSteven Silvester2014-07-30 21:05:29 -0500
committerSteven Silvester2014-07-30 21:05:29 -0500
commita2b8ddddc11ef25363dc5986f0ea2546f9a9e75a (patch)
tree1d4b48e40cb78fba3436b402eee0ca0bb67a7c4c /bash_kernel.py
parent11db1d7d812d6ecbc91a8a9d7554a9f1eb7a66ba (diff)
downloadscilab_kernel-a2b8ddddc11ef25363dc5986f0ea2546f9a9e75a.tar.gz
scilab_kernel-a2b8ddddc11ef25363dc5986f0ea2546f9a9e75a.tar.bz2
scilab_kernel-a2b8ddddc11ef25363dc5986f0ea2546f9a9e75a.zip
Initial translation from bash kernel to octave kernel
Diffstat (limited to 'bash_kernel.py')
-rw-r--r--bash_kernel.py76
1 files changed, 0 insertions, 76 deletions
diff --git a/bash_kernel.py b/bash_kernel.py
deleted file mode 100644
index 00cc795..0000000
--- a/bash_kernel.py
+++ /dev/null
@@ -1,76 +0,0 @@
-from IPython.kernel.zmq.kernelbase import Kernel
-from pexpect import replwrap
-
-import signal
-from subprocess import check_output
-import re
-
-__version__ = '0.2'
-
-version_pat = re.compile(r'version (\d+(\.\d+)+)')
-
-class BashKernel(Kernel):
- implementation = 'bash_kernel'
- implementation_version = __version__
- language = 'bash'
- @property
- def language_version(self):
- m = version_pat.search(self.banner)
- return m.group(1)
-
- _banner = None
- @property
- def banner(self):
- if self._banner is None:
- self._banner = check_output(['bash', '--version']).decode('utf-8')
- return self._banner
-
- def __init__(self, **kwargs):
- Kernel.__init__(self, **kwargs)
- # Signal handlers are inherited by forked processes, and we can't easily
- # reset it from the subprocess. Since kernelapp ignores SIGINT except in
- # message handlers, we need to temporarily reset the SIGINT handler here
- # so that bash and its children are interruptible.
- sig = signal.signal(signal.SIGINT, signal.SIG_DFL)
- try:
- self.bashwrapper = replwrap.bash()
- finally:
- signal.signal(signal.SIGINT, sig)
-
- def do_execute(self, code, silent, store_history=True, user_expressions=None,
- allow_stdin=False):
- if not code.strip():
- return {'status': 'ok', 'execution_count': self.execution_count,
- 'payloads': [], 'user_expressions': {}}
-
- interrupted = False
- try:
- output = self.bashwrapper.run_command(code.rstrip(), timeout=None)
- except KeyboardInterrupt:
- self.bashwrapper.child.sendintr()
- interrupted = True
- self.bashwrapper._expect_prompt()
- output = self.bashwrapper.child.before
-
- if not silent:
- stream_content = {'name': 'stdout', 'data':output}
- self.send_response(self.iopub_socket, 'stream', stream_content)
-
- if interrupted:
- return {'status': 'abort', 'execution_count': self.execution_count}
-
- try:
- 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,
- 'payloads': [], 'user_expressions': {}}
-
-if __name__ == '__main__':
- from IPython.kernel.zmq.kernelapp import IPKernelApp
- IPKernelApp.launch_instance(kernel_class=BashKernel)