0
我必須運行兩個進程並行並連續處理它們的輸出。Bash連續讀取後臺進程的輸出
基本執行應該在bash腳本如下執行Python腳本啓動:
python somefile.py &
python someotherfile.py &
他們都跑了很長時間並生成日誌輸出。我想處理它們兩個的輸出(哪個程序生成日誌輸出並不重要)。
是否有可能將輸出重定向到一個處理它的函數?
我必須運行兩個進程並行並連續處理它們的輸出。Bash連續讀取後臺進程的輸出
基本執行應該在bash腳本如下執行Python腳本啓動:
python somefile.py &
python someotherfile.py &
他們都跑了很長時間並生成日誌輸出。我想處理它們兩個的輸出(哪個程序生成日誌輸出並不重要)。
是否有可能將輸出重定向到一個處理它的函數?
這是我想到的最簡單的事情。
文件a.sh:
while true; do
echo A
sleep 0.5
done
文件b.sh:
while true; do
echo B
sleep 1.2
done
文件c.sh:
(
./a.sh &
./b.sh &
) | while read output; do
echo "C: read $output"
done
文件c.sh
啓動a.sh
和b.sh
,無論是在背景,並從兩者讀取輸出。當c.sh運行時,輸出是:
C: read A
C: read B
C: read A
C: read A
C: read B
C: read A
C: read A
C: read B
C: read A
C: read A
訣竅是使用括號將命令組合在單個單元(以及另一個shell)中。這些命令運行(在本例中爲後臺),並將整個stdout傳送到while
循環中。
我認爲你所要求的是命名管道。谷歌應該能夠幫助你。 –
主要問題是:您是否需要在同一個過程中處理兩者的輸出(即,如果兩者之間存在交互作用),還是可以分別處理兩個輸出?第二種情況很簡單,第一種情況涉及命名管道或文件描述符(可以像命名管道一樣運行,不需要創建文件)。 – Fred
對不起,我不明白你的意思是第一個案件? – wasp256