diff options
author | Steven Silvester | 2014-07-30 21:05:29 -0500 |
---|---|---|
committer | Steven Silvester | 2014-07-30 21:05:29 -0500 |
commit | a2b8ddddc11ef25363dc5986f0ea2546f9a9e75a (patch) | |
tree | 1d4b48e40cb78fba3436b402eee0ca0bb67a7c4c /bash_kernel.py | |
parent | 11db1d7d812d6ecbc91a8a9d7554a9f1eb7a66ba (diff) | |
download | scilab_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.py | 76 |
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) |