Bash连续读取后台进程的输出
问题描述:
我必须运行两个进程并行并连续处理它们的输出。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