我寫一個開發工具,其中一部分將與發送到特定的文件輸出的背景下推出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,同時仍將筆記本輸出重定向到日誌文件中?