多くの要件と制約を指定していませんでした。あなたはすでにどこかにredisインスタンスがあると仮定します。
何ができることはラインによって、他のプロセスラインからの出力を読み、Redisのを使用して公開されています
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
:ここ
は、テスト用のファイル/tmp/foo
にあなたがecho
データをすることができます例です
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)
をお使いのログ出力を保存し、後で完全な形でそれを取得することができます。
他のプログラムの実行中にセロリの仕事は何ですか?ちょうど 'subprocess.call'を使用していますか? –
ただサブプロセスコール。 –