From ace4d01ca63038b8c48ddfe17c7757af0325293c Mon Sep 17 00:00:00 2001 From: Ben Spoor Date: Thu, 13 Apr 2017 08:09:16 +0000 Subject: [PATCH] Add args magic to provide cli-args to user program --- jupyter_c_kernel/kernel.py | 11 +++++++++-- resources/master.c | 6 ++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/jupyter_c_kernel/kernel.py b/jupyter_c_kernel/kernel.py index aeac151..053beff 100644 --- a/jupyter_c_kernel/kernel.py +++ b/jupyter_c_kernel/kernel.py @@ -2,6 +2,7 @@ from queue import Queue from threading import Thread from ipykernel.kernelbase import Kernel +import re import subprocess import tempfile import os @@ -118,7 +119,9 @@ class CKernel(Kernel): def _filter_magics(self, code): - magics = {'cflags': [], 'ldflags': []} + magics = {'cflags': [], + 'ldflags': [], + 'args': []} for line in code.splitlines(): if line.startswith('//%'): @@ -128,6 +131,10 @@ class CKernel(Kernel): if key in ['ldflags', 'cflags']: for flag in value.split(): magics[key] += [flag] + elif key == "args": + # Split arguments respecting quotes + for argument in re.findall(r'(?:[^\s,"]|"(?:\\.|[^"])*")+', value): + magics['args'] += [argument.strip('"')] return magics @@ -151,7 +158,7 @@ class CKernel(Kernel): return {'status': 'ok', 'execution_count': self.execution_count, 'payload': [], 'user_expressions': {}} - p = self.create_jupyter_subprocess([self.master_path, binary_file.name]) + p = self.create_jupyter_subprocess([self.master_path, binary_file.name] + magics['args']) while p.poll() is None: p.write_contents() p.write_contents() diff --git a/resources/master.c b/resources/master.c index 355454d..36190d6 100644 --- a/resources/master.c +++ b/resources/master.c @@ -25,5 +25,7 @@ int main(int argc, char **argv, char **envp) fprintf(stderr, "%s: %s\n", argv[0], error); return EXIT_FAILURE; } - return usermain(argc, argv, envp); -} \ No newline at end of file + + /* Call Users main, but make master.c invisible by removing first argument */ + return usermain(argc-1, argv+1, envp); +}