我有一个需要从命令行运行的Jupyter笔记本。为此,我有以下命令:
jupyter nbconvert --execute my_jupyter_notebook.ipynb --to python
此命令创建一个python脚本,然后执行它。但是,我在Python中使用日志记录库来记录某些事件。当它从上面的命令执行脚本时,终端上什么都看不到。
然而,当我手动执行转换的jupyter时,如下所示,我可以看到终端上的所有日志:
python3 my_jupyter_notebook.py
我已经尝试添加额外的参数,例如--debug和--stdout,但那些只输出所有代码,而不仅仅是日志。是否可以在执行nbconvert执行命令时在终端上输出记录结果?
答案 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