如何在禁用IPython JS访问的自定义环境中,无需IPython.notebook.kernel.execute获取Jupyter Notebook当前URL?
无需IPython.notebook.kernel.execute获取Jupyter Notebook当前URL的方法
方法一:用ipywidgets传递URL信息
既然你的环境里输入小部件能正常工作,就可以通过前端JS拿到URL,再用widget的通信通道把值传给Python,完全避开IPython.notebook.kernel.execute的限制。
示例代码如下:
import ipywidgets as widgets from IPython.display import display, Javascript # 创建一个文本部件用来存储URL url_widget = widgets.Text(description='当前URL:') display(url_widget) # 执行JS代码获取URL,再传给Python端的widget display(Javascript(""" // 获取带参数的完整页面URL const currentUrl = window.location.href; // 通过ipywidgets的通信通道把URL传递给Python侧 const comm = IPython.notebook.kernel.comm_manager.get_comm('ipywidgets'); comm.send({ method: 'update', state: {'value': currentUrl}, buffer_paths: [] }); """)) # 直接读取widget的值即可得到当前URL print("获取到的URL:", url_widget.value)
方法二:通过环境变量传递(需修改环境配置)
如果你有权限调整自定义Jupyter环境的服务器配置,可以在启动kernel时,把当前笔记本的URL存入环境变量。比如服务器端获取请求的URL后,设置JUPYTER_NOTEBOOK_URL环境变量,然后在Python里直接读取:
import os notebook_url = os.environ.get('JUPYTER_NOTEBOOK_URL') print("获取到的URL:", notebook_url)
这个方法需要修改服务器侧的配置,适合能调整环境的场景。
内容的提问来源于stack exchange,提问作者Geordie
相关产品推荐
相关产品推荐

