Xaver K ff9d635f89
Stdin using notebook raw_input (#1)
* 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.
2020-03-22 12:52:45 +01:00

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)