Bạn không chỉ định nhiều yêu cầu và ràng buộc. Tôi sẽ giả sử bạn đã có một trường hợp redis một nơi nào đó.
Những gì bạn có thể làm là đọc các đầu ra từ dòng quá trình khác do dòng và xuất bản nó qua redis:
Dưới đây là một ví dụ trong đó bạn có thể echo
dữ liệu vào một tập tin /tmp/foo
để thử nghiệm:
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
Trong một quy trình riêng biệt:
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
Nếu bạn muốn quá trình kết thúc, bạn có thể ví dụ gửi một "bỏ thuốc lá" sau khi nhiệm vụ cần tây được thực hiện.
Bạn có thể sử dụng các kênh khác nhau (chuỗi trong subscribe
) để tách đầu ra khỏi các quy trình khác nhau.
Bạn cũng có thể lưu trữ dữ liệu ghi nhận của bạn trong redis, nếu bạn muốn,
redis_instance.rpush('process log', message)
và sau đó lấy nó đầy đủ.
Nguồn
2013-05-13 18:43:45
Nhiệm vụ cần tây của bạn là gì khi chương trình khác chạy? Bạn chỉ đang sử dụng 'subprocess.call'? –
Yup chỉ là một subprocess.call. –