2017-02-15 3 views
0

2つのプロセスを並列に実行し、それらの出力を連続的に処理する必要があります。それらの両方は、長い時間のために実行し、ログ出力を生成Bashはバックグラウンドプロセスの出力を連続的に読み込みます

python somefile.py & 
python someotherfile.py & 

基本的な実行は、次のようにPythonスクリプトを実行bashスクリプトで起動する必要があります。私は両方の出力を処理したい(どのプログラムがログ出力を生成したかは重要ではない)。

出力を処理する関数にリダイレクトすることはできますか?

+0

あなたが求めているのは名前付きパイプだと思います。 Googleがそれを手伝ってくれるはずです。 –

+0

主な質問は、両方の出力を同じプロセスで処理する必要があるか(つまり、両方の間に相互作用がある場合)、または両方の出力を個別に処理できるかどうかです。 2番目のケースは非常に単純です。最初は、名前付きパイプまたはファイル記述子(ファイルの作成なしに名前付きパイプのように動作することができます)を使用します。 – 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:ファイルc.sha.shb.sh、の両方の起動

(
./a.sh & 
./b.sh & 
) | while read output; do 
    echo "C: read $output" 
done 

バックグラウンドに出力し、両方からの出力を読み取ります。 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ループにパイプされます。

関連する問題