Jupyter notebook 获取IPython连接到的当前Jupyter服务器的基本URL
我想知道IPython目前连接的Jupyter笔记本服务器的基本URL。我知道notebook.notebookapp.list_running_servers()函数会产生如下输出:Jupyter notebook 获取IPython连接到的当前Jupyter服务器的基本URL,jupyter-notebook,ipython,jupyter,jupyterhub,Jupyter Notebook,Ipython,Jupyter,Jupyterhub,我想知道IPython目前连接的Jupyter笔记本服务器的基本URL。我知道notebook.notebookapp.list_running_servers()函数会产生如下输出: [ { 'base_url': '/', 'hostname': 'localhost', 'notebook_dir': '/home/username/dir-notebook-was-spawned-in', 'password': False, 'pid': 3
[
{
'base_url': '/',
'hostname': 'localhost',
'notebook_dir': '/home/username/dir-notebook-was-spawned-in',
'password': False,
'pid': 368094,
'port': 8888,
'secure': False,
'sock': '',
'token': '4e7e860527d5333306cb06c594aa2167a7d375294f96c2d9',
'url': 'http://localhost:8888/',
},
...
]
这感觉非常接近我想要的,因为那里有一个base\u url
键,但是我不知道如何确定列表中的哪个服务器是IPython实际连接的。我能想到的最接近的近似方法是看哪台服务器的notebook\u dir
键最匹配os.getcwd()
,但这显然是不完美的
进一步调查结果:
- 我现在意识到
不是正确的方法,因为笔记本服务器和内核不能保证在同一个地方运行,在这种情况下,函数总是返回一个空列表notebook.notebookapp.list\u running\u servers()
window.location.href
获取基本URL,您可以使用以下命令:
jupyter笔记本列表——json | python3-c'导入json;导入系统;打印(json.load(sys.stdin)[“基本url]”)
(从该命令中删除[“base_url”]
部分以查看完整的字典)
在Python中,在以下输出中列出了基本url
:
导入psutil
psutil.Process().parent().cmdline()
这些都是从Jupyter话语论坛和
对于活页夹课程,有人指出要使用以下内容来获得详细信息:
env|grep-i jupyter
因此,我想接下来的问题是如何在Javascript端获取基本URL。window.location.href
返回URL。但这不会提供笔记本服务器的基本URL。例如,在Binder(或任何其他JupyterHub deployemt)中,服务器不是在/
处公开的,而是在根目录下的某个路径上公开的,该路径可能不确定。在编写Jupyter服务器扩展时,了解基本URL非常重要,这样您的客户机就可以访问扩展的资源。您是对的,例如在xarray传单中,我们尝试过这样做,但这并不好。在Binder的情况下,它向URL添加一个随机路径,并重定向到服务器的基本URL,因此您需要这个随机部分。也许将浏览器的URL与notebook.notebookapp.list_running_servers()
的基本URL结合使用会是最好的选择?一定有办法在客户端实现这一点。也许Jason Grout会知道?正如在对原始问题的编辑中所指出的,任何服务器端都不会工作,因为内核和实际的笔记本服务器不能保证在同一个实例上运行。因此,检查类似于jupyter notebook list
(在引擎盖下使用list\u running\u servers()
)的内容不会在所有情况下都起作用,可能会生成一个空列表。查找服务器的基本URL必须在客户端完成。抱歉,我认为这可能提供了扩展所需的部分,因为window.location.href
似乎不是您所需要的。考虑到你文章标题中的关键词,这两条建议可能会对以后的人有所帮助。在不同的情况下,这绝对是一个可能的解决方案。psutil
的用法我还没有遇到过,因此对其他人可能有用。但就我的特殊情况而言,还不够全面。