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.

相關問題