Set bufferedOutput=True since that is the usual command line behaviour. Updated README.

This commit is contained in:
Xaver K 2021-02-25 12:50:14 +01:00
parent 4f8d436439
commit 66cbe9b2ca
2 changed files with 26 additions and 10 deletions

View File

@ -1,12 +1,25 @@
# Minimal C kernel for Jupyter # C kernel for Jupyter
This project was forked from [https://github.com/brendan-rius/jupyter-c-kernel](brendan-rius/jupyter-c-kernel) as that project seems to have been abandoned. (PR is pending)
This project includes fixes to many issues reported in [https://github.com/brendan-rius/jupyter-c-kernel](brendan-rius/jupyter-c-kernel), as well as the following additional features:
* Option for buffered output to mimic command line behaviour (useful for teaching, default is on)
* Command line input via `scanf` and `getchar`
* Support for `C89`/`ANSI C` (all newer versions were already supported and still are)
Following limitations compared to command line execution exist:
* Input is always buffered due to limitations of the jupyter interface
* When using `-ansi` or `-std=C89`, glibc still has to support at least `C99` for the interfacing with jupyter (this should not be an issue on an OS made after 2000)
## Use with Docker (recommended) ## Use with Docker (recommended)
* `docker pull xaverklemenschits/jupyter-c-kernel` * `docker pull xaverklemenschits/jupyter-c-kernel`
* `docker run -p 8888:8888 xaverklemenschits/jupyter-c-kernel` * `docker run -p 8888:8888 xaverklemenschits/jupyter-c-kernel`
* Copy the given URL containing the token, and browse to it. For instance: * Copy the given URL containing the token, and browse to it. For instance:
``` ```bash
Copy/paste this URL into your browser when you connect for the first time, Copy/paste this URL into your browser when you connect for the first time,
to login with a token: to login with a token:
http://localhost:8888/?token=66750c80bd0788f6ba15760aadz53beb9a9fb4cf8ac15ce8 http://localhost:8888/?token=66750c80bd0788f6ba15760aadz53beb9a9fb4cf8ac15ce8
@ -16,14 +29,14 @@
Works only on Linux and OS X. Windows is not supported yet. If you want to use this project on Windows, please use Docker. Works only on Linux and OS X. Windows is not supported yet. If you want to use this project on Windows, please use Docker.
* Make sure you have the following requirements installed:
* Make sure you have the following requirements installed:
* gcc * gcc
* jupyter * jupyter
* python 3 * python 3
* pip * pip
### Step-by-step: ### Step-by-step
```bash ```bash
git clone https://github.com/XaverKlemenschits/jupyter-c-kernel.git git clone https://github.com/XaverKlemenschits/jupyter-c-kernel.git
cd jupyter-c-kernel cd jupyter-c-kernel

View File

@ -106,7 +106,7 @@ class CKernel(Kernel):
super(CKernel, self).__init__(*args, **kwargs) super(CKernel, self).__init__(*args, **kwargs)
self._allow_stdin = True self._allow_stdin = True
self.readOnlyFileSystem = False self.readOnlyFileSystem = False
self.bufferedOutput = False self.bufferedOutput = True
self.linkMaths = True # always link math library self.linkMaths = True # always link math library
self.wAll = True # show all warnings by default self.wAll = True # show all warnings by default
self.wError = False # but keep comipiling for warnings self.wError = False # but keep comipiling for warnings
@ -191,7 +191,10 @@ class CKernel(Kernel):
for argument in re.findall(r'(?:[^\s,"]|"(?:\\.|[^"])*")+', value): for argument in re.findall(r'(?:[^\s,"]|"(?:\\.|[^"])*")+', value):
magics['args'] += [argument.strip('"')] magics['args'] += [argument.strip('"')]
# only keep lines which did not contain magics # always add empty line, so line numbers don't change
actualCode += '\n'
# keep lines which did not contain magics
else: else:
actualCode += line + '\n' actualCode += line + '\n'