使用子进程在内存中收集stderr。

2024-04-25 09:26:53 发布

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

我尝试在内存中收集stderr,而不是直接将其写入文件或stdout。我这样做是为了以某种方式生成错误日志文件。我发现了一个名为StringIO的库,它是内存中的“文件”。我不认为它能起作用。我的代码是:

        buffer = StringIO.StringIO()
        status = subprocess.call(args, stdout=log_fps["trace"], stderr=buffer)

        if status and self.V_LEVEL:
            sys.stderr.write(buffer.getvalue())
            print "generated error"

        if status:
            log_fps["fail"].write("==> Error with files %s and %s\n" % (domain_file, problem_file))
            log_fps["fail"].write(buffer.getvalue())

我得到以下错误:

^{pr2}$

我想这意味着我不能使用StringIO在内存中收集stderr。除了在/tmp中写入文件之外,我还能做什么呢?在


Tags: and文件内存logifbufferstatus错误
2条回答
import subprocess

p = subprocess.Popen(args, stdout=log_fps["trace"], stderr=subprocess.PIPE)

_, stderr = p.communicate()
print stderr,
stdout = subprocess.check_output(args)

有关更多选项,请参阅^{}文档。在

如果您不想捕获stdout,请使用Popen.communicate

^{pr2}$

相关问题 更多 >