Jupyter notebook 输出重定向
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)
但是,接下来执行的单元格的输出字符串没有"augmented"字符串
您可以使用 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__()
方法也可以。您还可以将这些重定向器代码放在 pre_run_cell
和 post_run_cell
hook function 中 IPython.
我想重定向笔记本每个单元格的输出。这是我试过的
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)
但是,接下来执行的单元格的输出字符串没有"augmented"字符串
您可以使用 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__()
方法也可以。您还可以将这些重定向器代码放在 pre_run_cell
和 post_run_cell
hook function 中 IPython.