2017-02-15 56 views
0

我必須運行兩個進程並行並連續處理它們的輸出。Bash連續讀取後臺進程的輸出

基本執行應該在bash腳本如下執行Python腳本啓動:

python somefile.py & 
python someotherfile.py & 

他們都跑了很長時間並生成日誌輸出。我想處理它們兩個的輸出(哪個程序生成日誌輸出並不重要)。

是否有可能將輸出重定向到一個處理它的函數?

+0

我認爲你所要求的是命名管道。谷歌應該能夠幫助你。 –

+0

主要問題是:您是否需要在同一個過程中處理兩者的輸出(即,如果兩者之間存在交互作用),還是可以分別處理兩個輸出?第二種情況很簡單,第一種情況涉及命名管道或文件描述符(可以像命名管道一樣運行,不需要創建文件)。 – Fred

+0

對不起,我不明白你的意思是第一個案件? – wasp256

回答

0

這是我想到的最簡單的事情。

文件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.shb.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循環中。