Jupyter notebook 获取IPython连接到的当前Jupyter服务器的基本URL

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

我想知道IPython目前连接的Jupyter笔记本服务器的基本URL。我知道notebook.notebookapp.list_running_servers()函数会产生如下输出:

[
  {
    '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()
    不是正确的方法,因为笔记本服务器和内核不能保证在同一个地方运行,在这种情况下,函数总是返回一个空列表

关于这一点,在本书中进行了一些讨论。您不能仅从后端获取基本URL,我们在ipyleaflet中的方法是使用命令行上的
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
的用法我还没有遇到过,因此对其他人可能有用。但就我的特殊情况而言,还不够全面。