我正在为项目添加新功能。在项目中,我将stdout记录到一个文件中,因为有些组件正在打印对调试有用的信息。我最近为这个项目添加了一个新功能,它使用造纸厂来运行jupyter笔记本电脑。我遇到的问题是,即使我将stdout重定向到一个临时变量,造纸厂也会将所有内容打印到控制台。
下面你可以看到一个示例代码,
with io.StringIO() as buf, redirect_stdout(buf):
pm.execute_notebook(
path,
path,
progress_bar=False,
stdout_file=buf,
stderr_file=buf,
parameters=dict(**params)
)
print("!!! redirected !!!")
print("!!! redirected !!!")
第一条print语句成功重定向到buf,而pm.execute_notebook打印的所有内容都将转到控制台。最后一个print语句按预期打印在控制台上。
为了解决这个问题,我不得不更改记录器的处理程序和日志级别。
获取记录器:
logger = logging.getLogger('papermill')
更改日志记录级别:
logger.setLevel('WARNING')
删除流处理程序:
logger.removeHandler(logging.StreamHandler())
删除流处理程序并设置正确的级别解决了我的问题。以下是Python日志记录文档的链接。