Python - sys.stderr没有保存到.txt或.log

时间:2015-11-07 04:49:37

标签: python

我正在检查标准流的工作情况,目前我正在使用python使用stderr。为了清楚地解释,以下是我的代码:

print("Python")
testt()

当我运行代码时,我得到以下内容:

Python
Traceback (most recent call last):
File "C:/Python34/s3.py", line 5, in <module>
testt()
NameError: name 'testt' is not defined

现在我想将错误消息保存到文本文件中,因此我的代码如下:

import sys

sys.stderr = open('err.txt', 'w') # I tried with 'err.log' also
print("Python")
testt()

sys.stderr.close()
sys.stderr = sys.__stderr__

现在,当我运行程序时,错误没有显示在python shell中。它也没有保存到err.txt文件中。

当我检查err.txt文件属性时,它显示最近修改了文件(即程序运行的时间),但该文件为空。可能是什么问题?我正在使用windows和python 3.4。

我安装了python 3.5但仍然遇到了同样的问题。我也尝试过使用contextlib,但仍然不成功。我使用contextlib修改的代码如下:

from contextlib import redirect_stdout, redirect_stderr

with open('C:/Users/Jeri_Dabba/Desktop/Shortcutz/test/outfile.txt', 'w') as file, redirect_stdout(file):
    help(pow)

with open('C:/Users/Jeri_Dabba/Desktop/Shortcutz/test/errfile.log', 'a') as file1, redirect_stderr(file1):
    testt()

redirect_stdout(file)工作正常,它将输出保存到文件中;而redirect_stderr(file1)未将stderr保存到文件中。

可能是什么问题?

1 个答案:

答案 0 :(得分:0)

似乎 sys.stderr 从未关闭。当 testt() 错误时,程序退出——只是错误消息被重定向。所以文件是空白的。