我从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()
我应该把它写到文件中还是程序中有错误?
答案 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
,而不是保存旧的sys.__stderr__
值。