mirror of
https://github.com/XaverKlemenschits/jupyter-c-kernel.git
synced 2025-04-28 17:06:04 +00:00
Add args magic to provide cli-args to user program
This commit is contained in:
parent
17316fb7b2
commit
ace4d01ca6
@ -2,6 +2,7 @@ from queue import Queue
|
|||||||
from threading import Thread
|
from threading import Thread
|
||||||
|
|
||||||
from ipykernel.kernelbase import Kernel
|
from ipykernel.kernelbase import Kernel
|
||||||
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
import tempfile
|
import tempfile
|
||||||
import os
|
import os
|
||||||
@ -118,7 +119,9 @@ class CKernel(Kernel):
|
|||||||
|
|
||||||
def _filter_magics(self, code):
|
def _filter_magics(self, code):
|
||||||
|
|
||||||
magics = {'cflags': [], 'ldflags': []}
|
magics = {'cflags': [],
|
||||||
|
'ldflags': [],
|
||||||
|
'args': []}
|
||||||
|
|
||||||
for line in code.splitlines():
|
for line in code.splitlines():
|
||||||
if line.startswith('//%'):
|
if line.startswith('//%'):
|
||||||
@ -128,6 +131,10 @@ class CKernel(Kernel):
|
|||||||
if key in ['ldflags', 'cflags']:
|
if key in ['ldflags', 'cflags']:
|
||||||
for flag in value.split():
|
for flag in value.split():
|
||||||
magics[key] += [flag]
|
magics[key] += [flag]
|
||||||
|
elif key == "args":
|
||||||
|
# Split arguments respecting quotes
|
||||||
|
for argument in re.findall(r'(?:[^\s,"]|"(?:\\.|[^"])*")+', value):
|
||||||
|
magics['args'] += [argument.strip('"')]
|
||||||
|
|
||||||
return magics
|
return magics
|
||||||
|
|
||||||
@ -151,7 +158,7 @@ class CKernel(Kernel):
|
|||||||
return {'status': 'ok', 'execution_count': self.execution_count, 'payload': [],
|
return {'status': 'ok', 'execution_count': self.execution_count, 'payload': [],
|
||||||
'user_expressions': {}}
|
'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:
|
while p.poll() is None:
|
||||||
p.write_contents()
|
p.write_contents()
|
||||||
p.write_contents()
|
p.write_contents()
|
||||||
|
@ -25,5 +25,7 @@ int main(int argc, char **argv, char **envp)
|
|||||||
fprintf(stderr, "%s: %s\n", argv[0], error);
|
fprintf(stderr, "%s: %s\n", argv[0], error);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
return usermain(argc, argv, envp);
|
|
||||||
|
/* Call Users main, but make master.c invisible by removing first argument */
|
||||||
|
return usermain(argc-1, argv+1, envp);
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user