如何获取 jupyter 内核 shell 的标准输出?

问题描述 投票:0回答:1

我想知道如何获取 Jupyter 内核的标准输出,它写在内核运行的 shell 上,而不是输出打印到浏览器的标准输出。

sys.stdout
只给出后者,例如。
<ipykernel.iostream.OutStream at 0x17d85a28880>
.

python jupyter-notebook jupyter stdout jupyter-kernel
1个回答
1
投票

简答:内核只有一个

sys.stdout
ipykernel.stdout
。然后,用
ipykernel.stdout
写的输入消息被发送到适当的前端。

长答案:首先打个比方:你可以想象自己有一个处理计算的大脑:这就是内核。虽然,内核,大脑,不会按照自己的意愿执行它们,但它需要认知,一个接口,来接收命令并传达答案:这是控制台。

IPython 将 REPL(读取、求值、打印、循环)分成两部分。内核是评估部分,控制台处理其余部分。 sys.stdout 是写入显示的对象。如果你使用

ipython
那么你使用 IPython 的前端 - ipython 控制台。相同的内核可用于另一个前端:notebook。等等。您可以查看 IPython 文档 以获取插图(以及此说明的另一个版本)。

所以,我们attach 一个前端到内核,内核不关心显示的细节(IPython,notebook 等...)。前端从内核接收消息。 (JSON 消息有一种格式 ZMQ)。

重要编辑:您可以阅读

ipykernel.iostdout
的代码。这是通过 JSON 将消息交换到前端的套接字编写器。更准确地说,内核有一个
sys.stdout
,它只是一个编写器,用于在任何前端打印消息。

© www.soinside.com 2019 - 2024. All rights reserved.