我写一个开发工具,其中一部分将与发送到特定的文件输出的背景下推出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,同时仍将笔记本输出重定向到日志文件中?