如何将stderr重定向到Python中的文件?

时间:2015-11-03 13:21:28

标签: python

我从http://forums.devshed.com/python-programming-11/redirect-stdout-stderr-file-500952.html获得的以下代码告诉我们如何将stderr重定向到文件。我试了但是错误信息没有保存到文件中。虽然我没有使用

sys.stderr = file_err

错误显示在空闲终端中,当我将file_err分配给sys.stderr时,错误不会显示在空闲终端中,并且它没有被复制到file_name.log

import sys

original_stderr = sys.stderr
file_err = open('file_name.log', 'w') # I tried with .txt also
sys.stderr = file_err
print(list[file]) # Used to create a NameError
sys.stderr = original_stderr
file_err.close()

我应该把它写到文件中还是程序中有错误?

1 个答案:

答案 0 :(得分:2)

您的代码工作正常(我的意思是:重定向到stderr。)。但请注意,与python3.5相比,您可以使用contextlib.redirect_stderr的上下文管理器来执行此操作:

from contextlib import redirect_stderr

with open('filename.log', 'w') as stderr, redirect_stderr(stderr):
    # errors from here are logged to the file.

注意:

  • 您不必明确致电close
  • 您不必明确保存旧的stderr并在最后恢复它。

顺便说一下:您只需使用stderr,而不是保存旧的sys.__stderr__值。