一尘不染

如何在Python中重定向stderr?

python

我想记录Python脚本的所有输出。我试过了:

import sys

log = []

class writer(object):
    def write(self, data):
        log.append(data)

sys.stdout = writer()
sys.stderr = writer()

现在,如果我“打印’某物’”,它将被记录下来。但是,如果我出现一些语法错误,例如说“ print’something#”,它将不会被记录-它会进入控制台。

如何从Python解释器中捕获错误?

我在这里看到了可能的解决方案:

http://www.velocityreviews.com/forums/showpost.php?p=1868822&postcount=3

但是第二个示例登录到/ dev / null-这不是我想要的。我想将其登录到类似上面的示例或StringIO之类的列表中。

另外,最好不要创建子进程(并在单独的线程中读取其stdout和stderr)。


阅读 205

收藏
2020-12-20

共1个答案

一尘不染

在Python代码中,您无法做任何事情来捕获相同代码的编译过程中的错误。怎么可能
如果编译器无法完成代码的编译,它将无法运行该代码,因此您的重定向甚至尚未生效。

这就是您(不需要的)子进程的所在。您可以编写重定向标准输出的Python代码,然后调用Python解释器来编译其他代码。

2020-12-20