1

我将笔记本服务器嵌入到独立的 OS X 应用程序中,其中服务器在子进程中启动(通过 NSTask),应用程序使用 HTTP 连接到该进程并在 WebView 中呈现 Web 前端。

我希望 OS X 应用程序部分能够查询服务器子进程以获取各种状态信息,最重要的是是否有任何笔记本打开且未保存更改。我想知道是否有某种方法可以在特殊的 URL 上查询这个,例如

http://127.0.0.1:8888/status.json

我想做的另一件事是控制笔记本服务器,例如告诉它在关闭之前保存任何未保存的更改。

4

1 回答 1

4

没有一般的“状态”查询,但您可以通过 GET 请求查看现有笔记本的 JSON 摘要

http://127.0.0.1:8888/notebooks

这将为您提供以下形式的字典列表:

[
 {
  "kernel_id": null, 
  "name": "Animations Using clear_output", 
  "notebook_id": "49222a70-b746-4fb2-9b96-fe1a61e82979"
 }, 
 {
  "kernel_id": "2e8de018-c816-4222-82d2-4a35cfa95f1c", 
  "name": "Cell Magics", 
  "notebook_id": "38ce96ab-b456-4af1-b68d-44a1a3ce86ee"
 }
]

Wherekernel_id=null意味着笔记本没有运行,并且kernel_id=U-U-I-D意味着它正在运行。

最重要的是是否有任何笔记本打开且未保存更改

无法知道未保存的更改,因为此信息仅存在于浏览器中 - 服务器甚至不知道文档已被编辑,因此无需查询。

我想做的另一件事是控制笔记本服务器,例如告诉它在关闭之前保存任何未保存的更改。

这是不可能的,因为实时文档实际上并不存在于服务器中。编辑后的文档仅存在于编辑笔记本的浏览器窗口中的浏览器端

如果要检查未保存的更改和/或触发保存,则必须通过与 WebView 中的 javascript 交互来执行此操作 - js 中的笔记本对象有一个“脏”标志,表示存在未保存的更改。所以“保存任何未保存的更改”将是:

if (IPython.notebook.dirty) { IPython.notebook.save_notebook(); }

用 IPython 1.0.dev 测试

于 2013-02-27T06:29:14.720 回答