在IPython中同时显示和捕获标准输出?

时间:2014-01-08 03:12:11

标签: ipython

我有兴趣在IPython中实现一种行为,就像!!!的组合。我正在尝试使用IPython终端作为我的(Windows)shell的附件。对于长时间运行的命令(例如,构建脚本),我希望能够像!那样在输出时观察输出。我还希望将命令的输出捕获到输出历史记录中!!,但这会延迟打印任何内容,直到所有输出都可用。

有没有人对如何实现这样的事情有任何建议?我猜这里有一个IPython.utils.io.Tee()对象很有用,但是我对IPython的了解还不够正确。

1 个答案:

答案 0 :(得分:0)

以下是我刚刚在iPython notebook v2.3中尝试的一段代码,它似乎可以执行所要求的操作:

import sys
import IPython.utils.io
outputstream = IPython.utils.io.Tee("outputfile.log", "w", channel="stdout")
outputstream.write("Hello worlds!\n")
outputstream.close()

logstream=open("outputfile.log", "r")
sys.stdout.write("Read back from log file:\n")
sys.stdout.write(logstream.read())

日志文件创建在与iPython笔记本文件相同的目录中,因此显示运行此单元格的输出:

Hello worlds!
Read back from log file:
Hello worlds!

我还没有在iPython终端试过这个,但是没有理由认为它不会在那里工作。

(作为牛津参与http://aaronswartzhackathon.org的一部分研究和回答)