我想运行一个命令并在运行时将结果存储在 Redis 中。
虽然演示的命令是ls/etc,但在现实生活中我想将它用于长时间运行的进程。
我写了一些演示代码来展示这个想法。
不幸的是,这段代码在运行时坚持一个文件号,并且不起作用,即使我模拟了一个。我怎样才能做到这一点?
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()
最佳答案
您应该将 sys.stdout 替换为自定义标准输出。
一个这样的例子:
从 unittest.mock 导入补丁
使用补丁('sys.stdout',your_stdout),补丁('sys.stderr',your_stderr):
做一点事
关于python - 从 Python Popen 将 stdout 和 stderr 存储在 Redis 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37201351/