关于异常:如何在python中将std.error写入文件,而将std.out写入控制台?

how to write std.error to file but std.out to console in python?

本问题已经有最佳答案,请猛点这里访问。

在这个例子中,我想用write来控制台(std.out)try block中;但是当except block抛出异常时,我想把异常内容写到std.err中,它被重新定向到一个日志file中。

我只需要在except块中打开一个file,然后在上面打开write。但是,每个try-catch块都需要这样做,因此,如果有re-directing的替代方案,这些std.err的例外情况,并记录标准错误。

1
2
3
4
5
6
7
8
>>> try:
...   print"hello world"
...   1/0
... except ZeroDivisionError as e:
...   print"exception"
...
hello world
exception


这是绝对可能的:

1
2
import sys
sys.stderr = open("/tmp/errors.txt","w")

以下所有到stderr的打印都将转到该文件。

不过,您可能应该在shell级别而不是在Python级别完成这项工作——这要灵活得多。


如果要打印到stderr,请使用sys.stderr并让操作系统和用户处理打印到std.err的文本的位置。这允许用户在POSIX终端上运行python your_script.py 2> my_err_output,仍然捕获std.err内容。

如果要将日志记录信息输出到特定文件,请改用日志记录模块。

不要修改一个非常标准的概念的行为——那将是错误的。正确的日志记录允许您获取所需的信息,但允许预期的回溯(通过管道连接到stderr来获取)到用户,而无需找到您的特殊文件。