python - 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)
但是,下一个执行单元的输出字符串没有“增强”字符串
解决方案
您可以使用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__()
and方法也可以。__exit__()
您还可以将这些重定向器代码放在IPython的pre_run_cell
andpost_run_cell
钩子函数中。
推荐阅读
- mysql - 为什么当我在 mysql 中查询 jsonArray 字符串时,'JSON_LENGTH' 函数总是返回 1 个结果?
- avr - 以位监视寄存器的值
- javascript - Handlebar 默认语法在我的项目中不起作用,但它在在线 Handlebar Viewer 站点中起作用
- c# - 在 C# 中应该如何有效地实现交换运算符重载?
- bash - 使用`cat example.file`在heroku中设置配置变量
- sass - 无法覆盖 Bulma 导航栏颜色
- awk - AWK - 反转字段顺序
- android - Android 前台 IntentService 是在 UI 线程还是其他线程中运行?
- dart - 如何过滤布尔值列表并返回 Dart 中合格项目的索引?
- c# - 调试期间的 C# .NET Core api 身份验证默认值