繁体   English   中英

Jupyter笔记本电脑输出重定向

[英]Jupyter notebook output redirection

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

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)

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

您可以使用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

产量

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM