gpt4 book ai didi

Python 2.7 跟踪打印的内容

转载 作者:太空宇宙 更新时间:2023-11-03 13:01:48 24 4
gpt4 key购买 nike

我正在为我的学生(我是导师)开发一个代码检查器。该项目是他们编写一个函数,使用 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() object替换 stdout:

import sys
from io import BytesIO

orig_stdout, sys.stdout = BytesIO()

io 是来自 Python 3 的更新、更强大的 I/O 库,在 Python 2 中也可用; io.BytesIO() 是更强大的 StringIO.StringIO() 版本。

然后您可以通过调用 sys.stdout.getvalue() 检查打印的内容;完成后,您可以从 orig_stdout 恢复。

演示:

>>> 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'

请注意,我从较早的引用中恢复了 sys.stdout。您也可以使用 sys.__stdout__ , 没有其他东西可以替代 sys.stdout;保存对 sys.stdout 指向的内容的引用 现在 更安全。

关于Python 2.7 跟踪打印的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18136412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com