【问题标题】:Show logging output in terminal when calling a notebook调用笔记本时在终端中显示日志输出
【发布时间】:2019-03-06 19:32:26
【问题描述】:

我想从 python bash 脚本执行一个笔记本并在终端中显示所有日志输出。 问题是只显示了main.sh 脚本的输出,而不是笔记本foo.ipynb 的输出。

我已经尝试从互联网上为记录器设置不同的设置,但没有让它工作。任何想法如何正确设置记录器配置?

这是一个例子:

main.sh:

#!/usr/bin/python3

import subprocess
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

logger.info("Calling Notebook...")
subprocess.check_call("jupyter nbconvert --to notebook --execute --inplace foo.ipynb",  shell=True)
logger.info("Finished")

foo.ipynb

import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

logger.info('Start ...')
a = 3
logger.info('End...')

我无法为记录器找到正确的配置,以便在我的终端中查看笔记本中的记录语句。

运行后输出./main.sh

INFO:__main__:Calling Notebook...
[NbConvertApp] WARNING | Config option `template_path` not recognized by `NotebookExporter`.
[NbConvertApp] Converting notebook foo.ipynb to notebook
[NbConvertApp] Executing notebook with kernel: python3
[NbConvertApp] Writing 983 bytes to foo.ipynb
INFO:__main__:Finished

【问题讨论】:

    标签: python-3.x logging jupyter-notebook


    【解决方案1】:

    问题似乎是 jupyter 进程正在捕获 stderr 流,而不是将其重定向到终端。我会先尝试添加开关--stderr

    subprocess.check_call("jupyter nbconvert --to notebook --stderr --execute --inplace foo.ipynb",  shell=True)
    

    如果失败,请尝试添加--stdout 或代替--stderr。最后,我在几个地方读到了你需要使用--to html 代替其他选项来接收stdout/stderr 消息。所以你可能需要尝试:

    subprocess.check_call("jupyter nbconvert --to html --stdout --stderr --execute --inplace foo.ipynb",  shell=True)
    

    或者可能没有--stderr,如果它抱怨它不是一个有效的选项(不能直接测试它,找不到任何官方文档,我只是偶然发现了几个 sn-ps使用它)。

    希望其中之一会强制 jupyter 将您的 stderr 流重定向到终端。

    【讨论】:

    【解决方案2】:

    当调用子进程时,使用单独的 shell 来执行脚本 foo.py,因此日志记录在该 shell 上完成。如果您希望将所有日志记录信息保存在同一个文件中,请使用记录器文件来获取日志记录数据。

    logging.basicConfig(filename="logging.log", level=logging.DEBUG, format='%(asctime)s - %(relativeCreated)6d - %(threadName)s - %(message)s ', filemode= 'a')

    【讨论】:

    • 在文件模式下,使用追加(即'a')来获取所有shell的所有输出
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    相关资源
    最近更新 更多