2017-02-15 5 views
0

Мне нужно выполнить два процесса параллельно и непрерывно обрабатывать их вывод.Bash непрерывно считывает выходные данные из фоновых процессов

Основное исполнение должно быть начато в Баш скрипт, который выполняет сценарии питона следующим образом:

python somefile.py & 
python someotherfile.py & 

Оба запуска в течение длительного времени и производить выходы лог. Я хочу обрабатывать выходы обоих из них (неважно, какая программа сгенерировала выход журнала).

Можно ли перенаправить вывод на функцию, которая его обрабатывает?

+0

Я думаю, что вы просите - это именованная труба. Google должен быть в состоянии помочь вам в этом. –

+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.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 

Хитрость заключается в использовании скобок для группы команд в одном блоке (ну, другой оболочки). Эти команды запускаются (в фоновом режиме в этом примере), а общий вывод stdout передается в контур while.

Смежные вопросы