Constantinius 目前接受的答案在大多数情况下都很好用,但在 Jupyter 笔记本中却不行。
以下是如何让它工作(使用可重用功能)...
TLDR~不要使用sys.__stout__,而是备份sys.stdout,稍后再恢复。
在 Jupyter 笔记本中,运行 sys.stdout == sys.__stdout__ 返回 false。这是因为每个单元格都有一个单独的输出流(而不是一个终端实例,即sys.__stdout__)。
因此,对于使用 Jupyter 笔记本的每个人,请务必备份旧的 sys.stdout 路径并在之后恢复它。
这是它的一个函数:
import sys, os
def deafen(function, *args):
real_stdout = sys.stdout
sys.stdout = open(os.devnull, "w")
output = function(*args)
sys.stdout = real_stdout
return output
将函数及其参数/参数 (args) 传递给 deafen。它会备份旧的 sys.stdout,切换到 os.devnull 并再次返回自身。
对于一个完整的例子,我们可以创建第二个函数 (test_function):
def test_function(first_argument, second_argument, *args):
print(first_argument)
print(second_argument)
print(args)
现在,如果我们尝试像平常一样使用test_function(也就是没有deafen),我们将在屏幕上打印出一堆输出:
print("Printing should work fine here")
test_function(32, 12, 1, 32, 1)
但是,当使用deafen 时,我们不会得到新的输出:
print("That'll be the last thing you see...")
deafen(test_function, 32, 12, 1, 32, 1)
附带说明,deafen 函数仍返回函数输出。您还可以将deafen 与sys.__stdout__ 一起使用,方法是将sys.stdout = real_stdout 替换为sys.stdout = sys.__stdout__(也可以在使用时删除real_stdout = sys.stdout)。
希望对正在寻找更强大或更灵活的解决方案(可能适用于 Jupyter 笔记本或与多种功能一起使用)的任何人有所帮助!