【发布时间】:2016-08-04 19:43:48
【问题描述】:
我想将 Python 脚本的标准错误和标准输出重定向到同一个输出文件。从终端我可以使用
$ python myfile.py &> out.txt
执行我想要的相同任务,但我需要从 Python 脚本本身执行它。
我查看了Redirect subprocess stderr to stdout、How to redirect stderr in Python? 和来自here 的示例 10.10 的问题,然后我尝试了以下操作:
import sys
fsock = open('out.txt', 'w')
sys.stdout = sys.stderr = fsock
print "a"
在 out.txt 文件中正确打印字母“a”;但是,当我尝试以下操作时:
import sys
fsock = open('out.txt', 'w')
sys.stdout = sys.stderr = fsock
print "a # missing end quote, will give error
我在终端上收到错误消息“SyntaxError ...”,但文件 out.txt 中没有。我需要做什么才能将 SyntaxError 发送到文件 out.txt?我不想写异常,因为在那种情况下我必须在脚本中写太多异常。我正在使用 Python 2.7。
更新:正如下面的答案和 cmets 所指出的,SyntaxError 将始终输出到屏幕,我替换了该行
print "a # missing end quote, will give error
通过
print 1/0 # Zero division error
ZeroDivisionError 被输出到文件中,因为我想在我的问题中使用它。
【问题讨论】:
-
尝试在代码中引发非语法错误的错误。在
print "a"之后,引发类似raise ValueError('A very specific bad thing happened')的错误 -
@JamesRusso,出于我在问题中提到的原因,我不想提出任何类型的异常。有没有办法从 Python 脚本本身内部模拟“&> 文件名”的 bash 方式?
-
我指的只是为了测试目的......为了测试它是否正常工作,只需引发一个错误并确保它被写入您的文件。如果是这样,所有未来的错误都应该写入文件
-
@jsbueno 和 James Russo,看起来问题出在 SyntaxError 上。可能其他异常会根据我的需要重定向到文件。
-
@jsbueno 这在 Python 3.6 中不起作用吗?我正在玩类似的代码,但没有打印出文本文件。
标签: python python-2.7 stderr