mar*_*st2 3 python logging python-2.7
我正在为我的学生编写代码检查员(我是导师).该项目是他们编写一个使用print关键字打印特定字符串的函数.我希望能够通过存储和匹配列表(或类似的东西)来测试他们打印的内容.基本设置是:
def checker():
    #run user code
    do some other things like save and check error messages etc
现在,在这个checker函数的某个地方,我希望能够跟踪打印的内容.在Javascript中,我能够做到这样的事情:
var logs = [];
var hold_logger = console.log //saves the console.log so nothing gets ruined
console.log = function (x) { logs.push(x) };
现在当我运行学生代码而不是打印到控制台时,它会将值推送到logs.我想在Python 2.7中实现同样的功能.
您可以为其分配不同的类文件对象sys.stdout; 打印的任何内容都写入该对象.
您可以使用io.BytesIO()对象替换stdout:
import sys
from io import BytesIO
orig_stdout, sys.stdout = BytesIO()
并通过调用检查打印的内容io.
演示:
>>> import sys
>>> from io import BytesIO
>>> orig_stdout, sys.stdout = sys.stdout, BytesIO()
>>> print 'Hello world!'
>>> output = sys.stdout.getvalue()
>>> sys.stdout = orig_stdout
>>> output
'Hello world!\n'
请注意,我恢复io.BytesIO()了StringIO.StringIO().您可能希望存储旧的值sys.stdout.getvalue()而将其恢复到该值以支持您的平台orig_stdout之前已经替换过的场景.
| 归档时间: | 
 | 
| 查看次数: | 322 次 | 
| 最近记录: |