猿问

Jupyter 笔记本输出重定向

我想重定向笔记本每个单元格的输出。这是我尝试过的


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)

但是,下一个执行单元格的输出字符串没有“增强”字符串


幕布斯7119047
浏览 400回答 1
1回答

料青山看我应如是

您可以使用contextlib.from contextlib import contextmanagerimport sys@contextmanagerdef 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最好使用with语句来管理重定向。如果在您的情况下这是不可能的,则调用重定向器对象的__enter__()和__exit__()方法也可以。您还可以将这些重定向器代码放在 IPython的pre_run_cell和post_run_cell 钩子函数中。
随时随地看视频慕课网APP

相关分类

Python
我要回答