Can a Jupyter / IPython notebook take arguments in

2019-02-03 19:30发布

问题:

Is it possible to write an Jupyter notebook such that parameters can be passed in via the URL of the notebook?

Example, for a URL such as this:

http://jupyter.example.com/user/me/notebooks/notebook1.ipynb?Variable1=Value1&Variable2=Value2

how could access Variable1 and Variable2 inside the Jupyter cell?

回答1:

You need to find out the URL using JavaScript and pass it to the IPython kernel:

from IPython.display import HTML
HTML('''
    <script type="text/javascript">
        IPython.notebook.kernel.execute("URL = '" + window.location + "'")
    </script>''')

or:

%%javascript
IPython.notebook.kernel.execute("URL = '" + window.location + "'");

Then in the next cell:

print(URL)

After this you can use the tools in the standard library (or plain string operations) to pull out the query parameters.



回答2:

You just need to take the values with javascript and push them to the ipython kernel like in the John Schmitt's link.

Cell [1]:

%%javascript
function getQueryStringValue (key)
{  
    return unescape(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + escape(key).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));
}
IPython.notebook.kernel.execute("Var1='".concat(getQueryStringValue("Variable1")).concat("'"));
IPython.notebook.kernel.execute("Var2='".concat(getQueryStringValue("Variable2")).concat("'")); 

And in another cell you can retrieve the python variables named Var1 and Var2:

>>>print Var1
Value1

And:

>>>print Var2
Value2