从Python Popen在Redis中存储stdout和stderr

2024-05-22 01:46:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想运行一个命令,并在运行时将结果存储在Redis中。在

虽然演示的命令是ls/etc,但在现实生活中,我希望将此命令用于长时间运行的进程。在

我写了一些演示代码来展示这个想法。在

不幸的是,这段代码在运行时坚持使用一个fileno,并且不起作用,即使我模拟了一个文件。我怎样才能做到这一点?在

import subprocess

import redis

class RedisFile:

    def __init__(self, key):
        self.key = key
        self.redis = redis.StrictRedis()

        print("inited RedisFile with key:", key)

    def write(self, value):
        self.redis.append(self.key, value)


def main():
    out = RedisFile("out")
    error = RedisFile("error")

    proc = subprocess.Popen(["ls", "/etc"],
            stdout=out,
            stderr=error,
            bufsize=0
            )


main()

Tags: key代码import命令selfredisredisfilevalue