|
例 10.10. 重定向错误信息
[you@localhost kgp]$ python stderr.py
[you@localhost kgp]$ cat error.log
Traceback (most recent line last):
File "stderr.py", line 5, in ?
raise Exception, 'this error will be logged'
Exception: this error will be logged如果您还没有下载本书附带的例子程序, 可以 下载本程序和其他例子程序。
#stderr.py
import sys
fsock = open('error.log', 'w')
sys.stderr = fsock
raise Exception, 'this error will be logged'
打开你要存储调试信息的日志文件。
将新打开的日志文件的文件对象赋值给 stderr 以重定向标准错误。
引发一个异常。从屏幕输出上可以注意到这个行为没有在屏幕上打印出任何东西。所有正常的跟踪信息已经写进 error.log。
还要注意你既没有显式关闭日志文件,也没有将 stderr 设回最初的值。这样挺好,因为一旦程序崩溃(由于引发的异常),Python 将替我们清理并关闭文件,这和永远不恢复 stderr 不会造成什么不同,因为,我提到过,一旦程序崩溃,则 Python 结束。如果你希望在同一个脚本的后面去做其它的事情,恢复初始值对 stdout 更为重要。
向标准错误写入错误信息是很常见的,所以有一种较快的语法可以立刻信息导出。
例 10.11. 打印到 stderr
>>> print 'entering function'
entering function
>>> import sys
>>> print >> sys.stderr, 'entering function'
entering function
print 语句的快捷语法可以用于向任何打开的文件写入,或者是类文件对象。在这种情况下,你可以将单个print 语句重定向到stderr 而且不用影响后面的print 语句。
标准输出,另一方面,只是一个只读文件对象,它表示从前一个程序到这个程序的数据流。这个对于老的Mac OS用户和Windows用户可能不太容易理解,除非你受到过 MS-DOS 命令行的影响。它工作的方式是你可以在单个命令行中构造一个命令的链,这样的话一个程序的输出就可以成为下一个程序的输入。第一个程序只是简单的输出到标准输出上(其本身没有做任何特别的重定向,只是执行了普通的 print 语句),然后,下一个程序从标准输入中读取,操作系统只是关注将一个程序的输出连接到一个程序的输入。 |
|