(я понимаю, что вы разблокированы, но оставляете здесь этот ответ, чтобы надеяться помочь будущим путешественникам)
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}), должна отображаться в выводе ячейки.