如何在其他所有内容发送到日志文件时显示Jupyter Notebook连接信息?

时间:2017-08-17 19:10:15

标签: jupyter-notebook background-process ipython-notebook jupyter

我正在编写一个开发人员工具,其中一部分将在后台启动一个Jupyter笔记本,并将输出发送到特定文件,例如

jupyter notebook --ip 0.0.0.0 --no-browser --allow-root \
  >> ${NOTEBOOK_LOGFILE} 2>&1 &

但是,我仍然希望通过stdout将笔记本的启动信息打印到控制台。如

[I 18:25:33.166 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[I 18:25:33.189 NotebookApp] Serving notebooks from local directory: /faces
[I 18:25:33.189 NotebookApp] 0 active kernels 
[I 18:25:33.189 NotebookApp] The Jupyter Notebook is running at: http://0.0.0.0:8888/?token=b02f25972...
[I 18:25:33.189 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 18:25:33.189 NotebookApp] 

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://0.0.0.0:8888/?token=b02f25972...

这样用户仍然可以看到他们需要的URL连接字符串。

我在笔记本命令之后尝试cat这个文件,但这有一些缺点。

笔记本启动和打印消息所需的时间是可变的,并且使用sleepcat的组合,日志文件是不可取的,因为如果开始时有一个罕见的延迟-up time,日志文件的cat可能没有打印,因为文件是空的。

另一方面,我不想将睡眠时间设置为过高的数字,因为用户将不得不在启动时等待太长时间。

我也试过tail -f ${NOTEBOOK_LOGFILE} | grep -n 10(因为启动线将是前10行)。这是有希望的,但笔记本服务器不会在每一行附加换行符,直到下一行传入。这意味着如果等待10行,tail进程将挂起,直到其他消息记录到日志文件中(生成第10个换行符)。

如何在笔记本输出此信息的同时,及时将笔记本输出重定向到日志文件中,以确保及时向stdout显示启动信息?

1 个答案:

答案 0 :(得分:0)

我想用tailhead来做这件事,但会对更简单的事情感兴趣。

(tail -f -n +1 ${NOTEBOOK_LOGFILE} | head -n 5);

这依赖于连接URL也在前5行中打印的事实,因此如果您试图从中提取head,那么保持greedy = /.*b/ posssessive = /.*+b/ 等待的新行的缺失将无关紧要第9和第10行。