Bash不断读取后台进程的输出

时间:2017-02-15 13:52:11

标签: bash subprocess

我必须并行运行两个进程并不断处理它们的输出。

应该在bash脚本中启动基本执行,该脚本执行python脚本,如下所示:

python somefile.py &
python someotherfile.py &

它们都运行很长时间并产生日志输出。我想处理它们的输出(哪个程序生成日志输出并不重要。)

是否可以将输出重定向到处理它的函数?

1 个答案:

答案 0 :(得分: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)。运行这些命令(在本例中为后台),整个标准输出通过管道输入while循环。