Jupyter Notebook中Shell命令的实时输出

时间:2018-09-27 21:38:58

标签: python jupyter-notebook

我告诉jupyter执行python脚本:

!python build_database.py

从终端执行时,python脚本会在执行过程中打印进度。但是,在jupyter笔记本中,执行后,我将所有输出打印为字符串列表。 有没有办法实时查看输出?

1 个答案:

答案 0 :(得分:2)

似乎开箱即用。 Shell命令的输出处理被深埋在ipython内部。

我建议的解决方案之一是根据以下代码创建自定义魔术方法。

选中this answer

在此基础上,我创建了一个可以使用的简单魔术方法:

from subprocess import Popen, PIPE, STDOUT

from IPython.core.magic import register_line_magic


@register_line_magic
def runrealcmd(command):
    process = Popen(command, stdout=PIPE, shell=True, stderr=STDOUT, bufsize=1, close_fds=True)
    for line in iter(process.stdout.readline, b''):
        print(line.rstrip().decode('utf-8'))
    process.stdout.close()
    process.wait()

用法:

%runrealcmd ping -c10 www.google.com

上面的代码可能会写得更好,但是对于您的需求来说应该没问题。