为了账号安全,请及时绑定邮箱和手机立即绑定

Jupyter 笔记本输出重定向

Jupyter 笔记本输出重定向

幕布斯7119047 2021-11-23 19:16:36
我想重定向笔记本每个单元格的输出。这是我尝试过的class Logger():    def __init__(self, stdout):        self.stdout = stdout    def write(self, msg):        self.stdout.write('augmented:' + msg)    def flush(self):        self.stdout.flush() 在一个单元格中,我stdout即时更改sys.stdout = Logger(sys.stdout)但是,下一个执行单元格的输出字符串没有“增强”字符串
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

您可以使用contextlib.


from contextlib import contextmanager

import sys

@contextmanager

def stdout_redirector():

    class MyStream:

        def write(self, msg):

            prefix = 'augmented:' if msg.strip() else ''

            old_stdout.write( prefix + msg)

        def flush(self):

            old_stdout.flush()

    old_stdout = sys.stdout

    sys.stdout = MyStream()

    try:

        yield

    finally:

        sys.stdout = old_stdout

//img1.sycdn.imooc.com//619ccdb600015bf304550491.jpg

最好使用with语句来管理重定向。如果在您的情况下这是不可能的,则调用重定向器对象的__enter__()__exit__()方法也可以。您还可以将这些重定向器代码放在 IPython的pre_run_cellpost_run_cell 钩子函数中。


查看完整回答
反对 回复 2021-11-23
  • 1 回答
  • 0 关注
  • 399 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信