我有两个相同的程序,它们会无限期地生成日志,直到它们被终止。我的bash程序的当前迭代将其中一个日志生成程序传输到python程序中,该程序实时处理日志:
./log1 | python program.py
我现在想要将第二个日志程序“log2”添加到管道中,以便将它们的日志提供给program.py。我尝试将两者分组为一个,如:
{ ./log1; ./log2; } | python program.py
但是这只会将log1传递到program.py,因为log1永远不会结束。我需要两个日志将他们的数据发送到program.py,如:
基本上,program.py只是同时接受最新的stdout到它的stdin中。如果有人有任何想法会很棒。
答案 0 :(得分:0)
我猜你可以创建一个在后台运行log1
和log2
的脚本,然后将其传递给program.py
例如,一个名为all_logs.bash
的脚本:
./log1 &
./log2 &
wait # waits for all background processes to finish
然后运行:
./all_logs.bash | program.py
确保您all_logs.bash
可执行。
示例强>
使用以下方法进行测试似乎有效:
# all_logs.bash
(for n in $(seq 5); do echo a$n; sleep 0.9; done) &
(for n in $(seq 5); do echo b$n; sleep 0.6; done) &
wait
和
# stdin_test.py
from __future__ import print_function
import sys
while True:
data = sys.stdin.readline()
if data:
print('data: {}'.format(data), end='')
sys.stdout.flush()
else:
break
print('Done.')
输出以下内容:
$ ./all_logs.bash | python stdin_test.py
data: a1
data: b1
data: b2
data: a2
data: b3
data: a3
data: b4
data: b5
data: a4
data: a5
Done.