gpt4 book ai didi

python - 让 ipython notebook 实时打印

转载 作者:IT老高 更新时间:2023-10-28 20:34:25 25 4
gpt4 key购买 nike

Ipython Notebook 似乎并没有实时打印结果,而是似乎以某种方式缓冲然后批量输出打印结果。处理打印命令后,如何让 ipython 打印我的结果?

示例代码:

import time


def printer():
for i in range(100):
time.sleep(5)
print i

假设上面的代码在一个被导入的文件中。我怎么能做到,当我调用打印机函数时,它每 5 秒打印一个数字,而不是最后的所有数字?

请注意,我无法编辑函数 printer() 因为我是从某个外部模块获取的。我希望以某种方式更改 ipython 笔记本的配置,使其不使用缓冲区。因此,我也不希望使用 sys.stdout.flush(),我想根据问题实时执行,我不希望任何缓冲区开始。

我还尝试使用以下命令加载 ipython 笔记本:

ipython notebook --cache-size=0

但这似乎也不起作用。

最佳答案

这只是one of the answersCarsten 提出的问题合并 diedthreetimes 建议的 __getattr__ 委托(delegate)在评论中:

import sys
oldsysstdout = sys.stdout
class flushfile():
def __init__(self, f):
self.f = f
def __getattr__(self,name):
return object.__getattribute__(self.f, name)
def write(self, x):
self.f.write(x)
self.f.flush()
def flush(self):
self.f.flush()
sys.stdout = flushfile(sys.stdout)

在原始答案中,未实现 __getattr__ 方法。没有它,它就会失败。该问题的答案的其他变体在笔记本中也失败了。

在 notebook 中,sys.stdoutIPython.kernel.zmq.iostream.OutStream 的一个实例,并具有许多通常不存在的方法和属性sys.stdout。委托(delegate) __getattr__ 允许 flushfile 伪装成 ...zmq.iostream.OutStream 鸭子。

这适用于使用 ipython 3.1.0 运行的 python 2.7 笔记本

关于python - 让 ipython notebook 实时打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29772158/

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