4

I am a beginner in Jupyter. I have a Python program that starts up my notebook using the nbformat execute API.

It works great, but there is one thing I have not managed to figure out; how can I pass data from my program to the notebook I am about to execute?

For completeness here is the code I use to run the notebook:

import nbformat
from nbconvert.preprocessors import ExecutePreprocessor

class NotebookExecutor:
    def __init__(self, name, base_path, notebook_filename_in, notebook_filename_out, timeout=-1):
        self.name = name
        if base_path.endswith('/') is False:
            base_path = base_path + '/'
        self.base_path = base_path
        self.notebook_filename_in = notebook_filename_in
        self.notebook_filename_out = notebook_filename_out
        self.timeout = timeout

    def run(self):
        print("Running notebook '" + self.name + "'")
        nb = nbformat.read(open(self.base_path + self.notebook_filename_in), as_version=4)
        ep = ExecutePreprocessor(timeout=self.timeout, kernel_name='python3', allow_errors=True)
        try:
            ep.preprocess(nb, {'metadata': {'path': self.base_path}})
        except CellExecutionError:
            msg = 'Error executing the notebook "%s".\n\n' % self.notebook_filename_in
            msg += 'See notebook "%s" for the traceback.' % self.notebook_filename_out
            print(msg)
        # raise
        finally:
            nbformat.write(nb, open(self.base_path + self.notebook_filename_out, mode='wt'))

ne = NotebookExecutor('Test', '/my/path', 'MyBook.ipynb', 'MyBook_out.ipynb')
ne.run()
gogasca
  • 9,283
  • 6
  • 80
  • 125
Mr. Developerdude
  • 9,118
  • 10
  • 57
  • 95

1 Answers1

2

I recommend using papermill, I'm not sure if this will help you solve your problem.

https://github.com/nteract/papermill

I can use it to loop through my notebook with different parameters.

ZK Zhao
  • 19,885
  • 47
  • 132
  • 206