如何在Python中将标准错误写入文件,但将标准输出打印到控制台?

58 浏览
0 Comments

如何在Python中将标准错误写入文件,但将标准输出打印到控制台?

这个问题已经有答案了

如何在Python中打印到stderr?

在这个例子中,我想要在 try 块内将内容 写入 到控制台 (std.out)

但当 except 块抛出异常时,我想将异常内容写到重定向到 log filestd.err 中。

我可以在 except 块 中打开一个 file 并写入它。但是这需要针对每个 try-catch 块进行操作,因此如果有一个将这些异常重新定向到 std.err 并记录 std.error 的替代方案,将会更好。

>>> try:
...   print "hello world"
...   1/0
... except ZeroDivisionError as e:
...   print "exception"
... 
hello world
exception

admin 更改状态以发布 2023年5月21日
0
0 Comments

如果希望打印到stderr,请使用sys.stderr,让操作系统和用户处理打印到std.err的文本去向。这样,用户可以在Posix终端上运行python your_script.py 2> my_err_output,并且仍然可以捕获std.err内容。

如果想要将日志信息输出到特定文件,请使用日志模块

不要修改非常标准的概念的行为 - 这将是出错的。正确的记录允许您捕获所需的信息,但允许例外的跟踪(这些跟踪被派生到stderr)以便让用户找到您的特殊文件。

0
0 Comments

这完全是可能的:

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

所有后续输出到标准错误流的内容都将写入到那个文件中。

不过你应该在 shell 层级上做这个操作而不是在 Python 层级上,这样更加灵活。

0