【问题标题】:Can a Jupyter / IPython notebook take arguments in the URL?Jupyter / IPython 笔记本可以在 URL 中接受参数吗?
【发布时间】:2015-08-04 19:56:04
【问题描述】:

是否可以编写一个 Jupyter notebook,使参数可以通过 notebook 的 URL 传入?

例如,对于这样的 URL:

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

如何在 Jupyter 单元内访问 Variable1Variable2

【问题讨论】:

    标签: python ipython-notebook jupyter


    【解决方案1】:

    您需要使用 JavaScript 找出 URL 并将其传递给 IPython 内核:

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

    或:

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

    然后在下一个单元格中:

    print(URL)
    

    之后就可以使用标准库中的工具(或者纯字符串操作)来提取查询参数了。

    【讨论】:

    • 我在尝试之前将此问题标记为已回答。我正在努力让它发挥作用。见stackoverflow.com/q/37172978/1698426
    • 我使用了一个额外的双引号:IPython.notebook.kernel.execute("URL = '" + window.location + "'");
    • 只要您添加一个内容为# Parameters: 的单元格,就有一个包可以为您处理拉出操作。请参阅Jupyter Notebook Params,其中包括一个launch binder 徽章,可让您在通过 MyBinder 服务支持的临时会话中运行演示。
    【解决方案2】:

    您只需要使用 javascript 获取值并将它们推送到 ipython 内核,就像在 John Schmitt 的链接中一样。

    单元格 [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("'")); 
    

    在另一个单元格中,您可以检索名为 Var1 和 Var2 的 Python 变量:

    >>>print Var1
    Value1
    

    还有:

    >>>print Var2
    Value2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2018-04-13
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多