JupyterLab 3:如何获取 运行 服务器的列表

JupyterLab 3: how to get the list of running servers

由于 JupyterLab 3.x 使用 jupyter-server 而不是经典的笔记本服务器,以下代码未列出使用 jupyter_server 服务的服务器:

from notebook import notebookapp 
notebookapp.list_running_servers()
None

仍然适用于 file/notebook 名称的是:

from time import sleep
from IPython.display import display, Javascript
import subprocess
import os
import uuid

def get_notebook_path_and_save():
    magic = str(uuid.uuid1()).replace('-', '')
    print(magic)
    # saves it (ctrl+S)
    # display(Javascript('IPython.notebook.save_checkpoint();')) # Javascript Error: IPython is not defined
    nb_name = None
    while nb_name is None:
        try:
            sleep(0.1)
            nb_name = subprocess.check_output(f'grep -l {magic} *.ipynb', shell=True).decode().strip()
        except:
            pass
    return os.path.join(os.getcwd(), nb_name)

但它既不是 pythonic 也不快


如何获取当前 运行 服务器实例 - 例如当前笔记本文件?

迁移到 jupyter_server 应该很容易,只需将 notebook 更改为 jupyter_server,将 notebookapp 更改为 serverapp 并更改适当的 configuration files - 与服务器相关的代码库基本没有变化。在列出服务器的情况下,只需使用:

from jupyter_server import serverapp
serverapp.list_running_servers()