多くの要件と制約を指定しませんでした。すでにどこかに redis インスタンスがあると仮定します。
できることは、他のプロセスからの出力を 1 行ずつ読み取り、redis を介して公開することです。
テスト用echo
にファイルにデータを入れる例を次に示します。/tmp/foo
import redis
redis_instance = redis.Redis()
p = subprocess.Popen(shlex.split("tail -f /tmp/foo"), stdout=subprocess.PIPE)
while True:
line = p.stdout.readline()
if line:
redis_instance.publish('process log', line)
else:
break
別のプロセスで:
import redis
redis_instance = redis.Redis()
pubsub = redis_instance.pubsub()
pubsub.subscribe('process log')
while True:
for message in pubsub.listen():
print message # or use websockets to comunicate with a browser
プロセスを終了したい場合は、セロリのタスクが完了した後に「終了」を送信できます。
さまざまなチャネル ( の文字列subscribe
) を使用して、さまざまなプロセスからの出力を分離できます。
必要に応じて、ログ出力を redis に保存することもできます。
redis_instance.rpush('process log', message)
後で完全に取得します。