Получение вывода jupyter в Google Colab - PullRequest
0 голосов
/ 28 июня 2018

Нам нужно увидеть вывод (stdout), который генерируется блокнотом jupyter в google colab. Делая некоторое исследование, кажется, что вывод передается по конвейеру до основного процесса:

root 1 0 0 Jun27? 00:00:00 / bin / bash -e /datalab/run.sh

конвейер, через который проходит вывод, выглядит следующим образом:

  • / usr / bin / python2 / usr / local / bin / jupyter-notebook .....

  • / tools / node / bin / node /datalab/web/app.js

  • узел / инструменты / узел / bin / forever ..... /datalab/web/app.js

  • / bin / bash -e /datalab/run.sh

Есть идеи, как мне получить к нему доступ?


Я только что обнаружил, что forever не перенаправляет вывод из app.js. forever list предполагает, что вывод будет /content/.forever/BQBW.log, который не существует. Я до сих пор не понимаю, почему и если это действительно то, где заканчивается stdout.

Ответы [ 4 ]

0 голосов
/ 03 ноября 2018

(я понимаю, что вы разблокированы, но оставляете здесь этот ответ, чтобы надеяться помочь будущим путешественникам)

Wurlitzer использует поток для очистки своих каналов, и я полагаю, что ваш код C ++ падал до того, как его канал был очищен. https://colab.research.google.com/drive/1i6x882Dn6E5PwaptVQ4ADGyEvBZAHm7i показывает пример, в котором код TF C ++ отправляет dev в stderr, а затем уничтожается до завершения выполнения. Быстрая очистка приводит к тому, что все выходные данные отображаются до того, как ядро ​​будет убито, но если оставить значение по умолчанию (0,2 с), это приведет к частичному выводу или его отсутствию.

Если вы хотите получить выходное сообщение assert / FATAL непосредственно перед смертью процесса, подход wurlitzer вряд ли будет работать на вас, и выполнение в качестве подпроцесса, вероятно, будет более быстрым путем итерации, например, запишите код, который вы бы имели в ячейке, в файл, например. используя %%writefile, а затем запустите питон подпроцесса, например: !python3 file.py Любой stdout / stderr, который испускает подпроцесс (будь то запись кода python в sys.std {out, err} или запись кода C ++ в fd = {1,2}), должна отображаться в выводе ячейки.

0 голосов
/ 30 июня 2018

Является ли выход, который вы ищете, исходящим от вашего кода или от самого Jupyter?

Если это jupyter, для включения ведения журнала требуется небольшая работа - вот полный пример: https://colab.research.google.com/drive/1q2mhsj4bwwdQK-KZIxrIIKed8O11MQl0

0 голосов
/ 02 июля 2018

В итоге я написал оболочку c ++ для cout и py :: print, которую можно использовать для включения или отключения печати на python. Довольно отвратительно, учитывая тот факт, что мне нужно было поменять весь исходный код на c ++, чтобы использовать обертку вместо std :: cout.

0 голосов
/ 29 июня 2018

Используйте Вурлитцер . Вот полный пример:

https://colab.research.google.com/drive/1jpAOdWJDCh_YzmqidGnlYHHCFODNKQkB

Этот блокнот:

  1. Сохраняет файл C, который печатается на стандартный вывод.
  2. Компилируется как общая библиотека.
  3. Загружает общую библиотеку в работающий бэкэнд Python.
  4. Использует wurlitzer для захвата вывода при вызове библиотеки.
...