mirror of
https://github.com/XaverKlemenschits/jupyter-c-kernel.git
synced 2025-04-14 10:26:09 +00:00

* Added stdin input via the notebook frontend * Added support for single line code snippets. * Updated README. * Updated Dockerfile. * Changed file cleanup to happen right after execution, rather than before kernel shutdown.
82 lines
2.0 KiB
Python
82 lines
2.0 KiB
Python
#!/usr/bin/env python
|
|
|
|
import json
|
|
import os
|
|
import sys
|
|
import argparse
|
|
|
|
from jupyter_client.kernelspec import KernelSpecManager
|
|
from IPython.utils.tempdir import TemporaryDirectory
|
|
|
|
kernel_json = {
|
|
"argv": [
|
|
"python3",
|
|
"-m",
|
|
"jupyter_c_kernel",
|
|
"-f",
|
|
"{connection_file}"
|
|
],
|
|
"display_name": "C",
|
|
"language": "c"
|
|
}
|
|
|
|
|
|
def install_my_kernel_spec(user=True, prefix=None):
|
|
with TemporaryDirectory() as td:
|
|
os.chmod(td, 0o755) # Starts off as 700, not user readable
|
|
with open(os.path.join(td, 'kernel.json'), 'w') as f:
|
|
json.dump(kernel_json, f, sort_keys=True)
|
|
# TODO: Copy resources once they're specified
|
|
|
|
print('Installing IPython kernel spec')
|
|
KernelSpecManager().install_kernel_spec(td, 'c', user=user, prefix=prefix)
|
|
|
|
|
|
def _is_root():
|
|
try:
|
|
return os.geteuid() == 0
|
|
except AttributeError:
|
|
return False # assume not an admin on non-Unix platforms
|
|
|
|
|
|
def main(argv=[]):
|
|
parser = argparse.ArgumentParser(
|
|
description='Install KernelSpec for C Kernel'
|
|
)
|
|
prefix_locations = parser.add_mutually_exclusive_group()
|
|
|
|
prefix_locations.add_argument(
|
|
'--user',
|
|
help='Install KernelSpec in user homedirectory',
|
|
action='store_false' if _is_root() else 'store_true'
|
|
)
|
|
prefix_locations.add_argument(
|
|
'--sys-prefix',
|
|
help='Install KernelSpec in sys.prefix. Useful in conda / virtualenv',
|
|
action='store_true',
|
|
dest='sys_prefix'
|
|
)
|
|
prefix_locations.add_argument(
|
|
'--prefix',
|
|
help='Install KernelSpec in this prefix',
|
|
default=None
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
|
|
if args.sys_prefix:
|
|
prefix = sys.prefix
|
|
user = None
|
|
elif args.user:
|
|
prefix = None
|
|
user = True
|
|
else:
|
|
prefix = args.prefix
|
|
user = None
|
|
|
|
install_my_kernel_spec(user=user, prefix=prefix)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main(argv=sys.argv)
|