问题 打印到控制台终端而不是进入IPython Notebook的单元格输出


我想打印到运行IPython Notebook的终端窗口而不是单元格输出。当我发出大量的内存时,打印到单元格输出会消耗更多内存并减慢我的系统速度 print 调用。从本质上讲,我想 这个 设计行为。

我尝试过以下方法:

  1. 我尝试了不同的排列 print 和 sys.stdout.write 电话
  2. 我查看了IPython Notebook文档 这里这里 和 这里 不靠别人帮助
  3. 我试过用 这个 作为一种解决方法,但它似乎只适用于Python 2.7

12549
2018-06-09 10:22


起源



答案:


您必须将输出重定向到系统标准输出设备。这取决于您的操作系统。在Mac上将是:

import sys
sys.stdout = open('/dev/stdout', 'w')

在IPython单元格中键入以上代码并对其进行评估。之后所有输出都将显示在终端中。


11
2018-06-09 11:14



有没有办法扭转这种局面?并恢复ipython标准输出 - Frederic Bazin
你可以,例如安全的笔记本电脑的参考 stdout 在重定向之前: nb_stdout = sys.stdout。现在,您将重定向输出。要回到笔记本输出中,只需写: sys.stdout = nb_stdout。将使用更清洁的解决方案 contextlib.redirect_stdout(NEW_TARGET) 上下文经理。 - MaxPowers
@MaxPowers你知道你应该在Windows中写什么吗? - Yaeli778
@MaxPowers:请注意 contextlib.redirect_stdout 仅适用于python 3.4及以上版本。 - hlin117


答案:


您必须将输出重定向到系统标准输出设备。这取决于您的操作系统。在Mac上将是:

import sys
sys.stdout = open('/dev/stdout', 'w')

在IPython单元格中键入以上代码并对其进行评估。之后所有输出都将显示在终端中。


11
2018-06-09 11:14



有没有办法扭转这种局面?并恢复ipython标准输出 - Frederic Bazin
你可以,例如安全的笔记本电脑的参考 stdout 在重定向之前: nb_stdout = sys.stdout。现在,您将重定向输出。要回到笔记本输出中,只需写: sys.stdout = nb_stdout。将使用更清洁的解决方案 contextlib.redirect_stdout(NEW_TARGET) 上下文经理。 - MaxPowers
@MaxPowers你知道你应该在Windows中写什么吗? - Yaeli778
@MaxPowers:请注意 contextlib.redirect_stdout 仅适用于python 3.4及以上版本。 - hlin117


在Windows上,这可以工作:

import sys
sys.stdout = open(1, 'w')

1
2017-12-07 07:36



嘿,你是@MaxPowers的复制答案和发布 - Dilip