0

我写一个开发工具,其中一部分将与发送到特定的文件输出的背景下推出Jupyter笔记本,如如何显示Jupyter Notebook连接信息,而其他一切发送到日志文件?

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

不过,我还是想在笔记本电脑的启动信息,以便通过标准输出打印到控制台。如

[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这个文件在笔记本命令后面,但是这有一些缺点。

需要为笔记本启动和打印的消息是可变的,并且使用的sleep组合与cat沿着日志文件是不可取的,因为如果有一个在启动时间罕见的延迟,对cat时间日志文件可能不会打印,因为文件是空的。

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

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

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

回答

0

我想通过tailhead来做到这一点,但会对更简单的事情感兴趣。

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

这依赖于一个事实,即连接URL也印第5行中,所以它并不重要的是,缺乏新行,保持head等待,如果你尝试从线9解压和10.

相关问题