我在服务器上运行的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!
据推测,这将在未来的某个时刻得到修复,但同时在关闭浏览器后还有一些简单的黑客可以让它继续打印到笔记本输出?如果它适用于内联图像,则为奖励积分。
答案 0 :(得分:3)
好吧,找到了一个好的解决方案。解决方案在此文件中: 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
以来所做的所有打印语句。显然,如果这是不必要的会更好,但它现在有效。