在nbconvert执行时记录

时间:2018-06-14 18:07:02

标签: python jupyter-notebook jupyter jupyter-lab nbconvert

我有一个需要从命令行运行的Jupyter笔记本。为此,我有以下命令:

jupyter nbconvert --execute my_jupyter_notebook.ipynb --to python

此命令创建一个python脚本,然后执行它。但是,我在Python中使用日志记录库来记录某些事件。当它从上面的命令执行脚本时,终端上什么都看不到。

然而,当我手动执行转换的jupyter时,如下所示,我可以看到终端上的所有日志:

python3 my_jupyter_notebook.py

我已经尝试添加额外的参数,例如--debug和--stdout,但那些只输出所有代码,而不仅仅是日志。是否可以在执行nbconvert执行命令时在终端上输出记录结果?

1 个答案:

答案 0 :(得分:1)

这是捕获在执行nbconvert期间产生的警告和异常并将其传递给记录器的代码。 Jupyter和nbconvert使用不同的异常处理方式。

from logging import getLogger
import sys
import traceback
import warnings
import IPython
import logging

logger = getLogger(name)
logging.basicConfig(stream=sys.stdout, level=logging.WARNING)

# Catch Traceback 
def showtraceback(self):
    traceback_lines = traceback.format_exception(*sys.exc_info())
    del traceback_lines[1]
    message = ''.join(traceback_lines)
    logger.error(traceback_lines[-1] + str(message))
IPython.core.interactiveshell.InteractiveShell.showtraceback = showtraceback

# Catch Warning 
def warning_on_one_line(message, category, filename, lineno, file=None, line=None):
    logger.warning(str(message) + '\n' + str(filename) + ' : ' + str(lineno))
    return '%s:%s: %s:%s\n' % (filename, lineno, category.__name__, message)
warnings.formatwarning = warning_on_one_line