在IPython.utils中有一个redirect_output函数,并且有一个%%捕获魔术函数,但现在这些函数已经消失了,关于这个主题的this thread现在已经过时了。
我想做以下事情:
from IPython.utils import io
from __future__ import print_function
with io.redirect_output(stdout=False, stderr="stderr_test.txt"):
while True:
print('hello!', file=sys.stderr)
思考?对于更多上下文,我试图捕获运行数小时或数天的某些ML函数的输出,并每隔5-10秒向stderr输出一行。然后我想获取输出,munge它,并绘制数据。
答案 0 :(得分:1)
您可以尝试使用其他文件描述符替换sys.stderr
,方法与建议的here相同。
import sys
oldstderr = sys.stderr
sys.stderr = open('log.txt', 'w')
# do something
sys.stderr = oldstderr
答案 1 :(得分:1)
@Ben,只是替换sys.stderr
不起作用,完全刷新逻辑suggested in the post是必要的。但是感谢你指针,因为它最终给了我一个工作版本:
import sys
oldstderr = sys.stderr
sys.stderr = open('log.txt', 'w')
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.sterr = flushfile(sys.stderr)
from __future__ import print_function
# some long running function here, e.g.
for i in range(1000000):
print('hello!', file=sys.stderr)
sys.stderr = oldstderr
如果Jupyter保留redirect_output()
函数和/或%%capture
魔法,那就太好了。