在IPython中使用分号来抑制输出的功能无效。

9
IPython技巧与技巧的文档中,建议在命令的末尾加上分号(;)以抑制其输出。但在我的情况下似乎不起作用,即使是一个;
print('Hello');

输出

Hello

我对输出抑制的理解有误吗?还是这是一个 bug?在使用 PuDB 时,当我按下“下一步”或“步入”时会闪烁得非常恼人。
附注:无论是在我的 Ubuntu IPython 0.10 还是 OS X v10.7(Lion)IPython 0.11 中,输出都没有被抑制。尽管在 OS X 中闪烁问题更严重,可能是因为 item2。
3个回答

12

尝试类似于1 + 1;的东西。没有分号,它应该通过打印(由repr格式化,尽管在整数的情况下无关紧要)给您有关结果的反馈 - 我假设这就是应该被抑制的输出。

Shell不会(也不应该)抑制写入恰好被sys.stdout引用的文件(这本质上就是print所做的)。这是完全不同的问题,而不是Shell的工作。


只是确认一下,delnan 是正确的 - 这是一个表达式的结果,你可以抑制它,而不是打印东西。 - Thomas K
谢谢您快速而简洁的回答,虽然我对它不能实现我所希望的感到失望,但我很感激您澄清了这一点。 - Jonas

6

在单元格的第一行添加%%capture。例如:

%%capture
print('Hello')

这只是简单地丢弃输出,但是%%capture魔法可以用于将输出保存到变量中——请查看文档


1

以下是来自Dataquest — 28个Jupyter Notebook技巧、诀窍和快捷方式文章的另一个示例:

  # Use a semicolon to suppress the output of a final function.
  %matplotlib inline
  from matplotlib import pyplot as plt
  import numpy
  x = numpy.linspace(0, 1, 1000)**1.5
  plt.hist(x); # Output not suppressed w/ semicolon?

下面是一个“正常工作”的分号抑制示例:

x = 1 + 1
x; # Output suppressed with semicolon!

所以它似乎抑制了通常会出现在终端中的“for”语句,但不包括图表等“内联”类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接