IPython Notebook - 关闭浏览器后继续将输出打印到笔记本输出中

11

我正在服务器上的IPython笔记本中进行长时间运行的实验,典型的工作循环是:启动实验,去吃午饭,回来后检查进展情况,查看Facebook,查看电子邮件,再次查看Facebook,关闭计算机,回来后查看Facebook,检查进度,...

问题在于,当我关闭笔记本所在的浏览器窗口时,打印/日志输出将不再保存在笔记本中。

例如,在我的简单实验中:

import time
start_time = time.time()
for i in xrange(5):
    print '%s seconds have passed' % (time.time()-start_time)
    time.sleep(2)
print 'Done!'

如果我运行代码,关闭标签页,10秒钟后再回来,我只能看到笔记本上次保存时的输出。我期望看到的是:

0.000111818313599 seconds have passed
2.00515794754 seconds have passed
4.01105999947 seconds have passed
6.0162498951 seconds have passed
8.01735782623 seconds have passed
Done!

可能这个问题在未来的某个时刻会被修复,但在此期间,是否有一些简单的技巧可以使它在关闭浏览器后继续输出到笔记本输出?如果还能适用于内联图片就更好了。

1个回答

4
我找到了一个较好的解决方案。解决方案在以下文件中: https://github.com/QUVA-Lab/artemis/blob/master/artemis/fileman/persistent_print.py 使用示例见以下链接: https://github.com/QUVA-Lab/artemis/blob/master/artemis/fileman/test_persistent_print.py 演示现在如下所示:
import time
from general.persistent_print import capture_print, reprint
capture_print()
start_time = time.time()
for i in xrange(5):
    print '%s seconds have passed' % (time.time()-start_time)
    time.sleep(2)
print 'Done!'

如果我运行

reprint()

在下一个单元格中,它将重新显示自从调用capture_print以来所做的所有打印语句。显然,如果这不必要,那就更好了,但现在它可以工作。

代码似乎已经不存在了。 - Poik
你好,我对你的回答非常感兴趣,但是我不明白需要安装什么才能使它工作。单独的文件persistent_print.py显然是不够的,因为导入的两个函数capture_printreprint都依赖于不在该文件中的CaptureStdOut。那么,我需要安装整个artemis框架才能让这个单独的模块工作吗? - DeltaIV
嗨,我从未费心将其制作为独立的代码。但是,只需删除对artemis的其他引用(包含CaptureStdOut的模块是独立的,您可以编辑代码以摆脱get_artemis_data_path),这应该很容易。或者,您可以使用pip install artemis-ml直接安装artemis。 - Peter

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