Вывод в реальном времени из команды оболочки в записной книжке Jupyter - PullRequest
0 голосов
/ 28 сентября 2018

Я говорю jupyter выполнить скрипт Python:

!python build_database.py

При запуске из терминала скрипт Python печатает ход выполнения во время выполнения.Однако в блокноте jupyter все выходные данные выводятся в виде списка строк ПОСЛЕ выполнения.Есть ли способ увидеть результат в прямом эфире?

1 Ответ

0 голосов
/ 30 сентября 2018

Похоже, это невозможно из коробки.Обработка вывода команд оболочки глубоко скрыта во внутренностях ipython.

Одним из решений, которое я бы порекомендовал, является создание собственного магического метода на основе приведенного ниже кода.

Проверьте этот ответ

На его основе я создал простой магический метод, который вы можете использовать:

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

Выше код, вероятно, можно было бы написать лучше, но для ваших нужд это должно быть прекрасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...