2016-03-11 3 views
3

Я в настоящее время использую ноутбук Jupyter, и я хотел бы заставить его распечатать Python журналов на выходную ячейку.Блокнот Jupyter не печатает журналы на выходной ячейке

Я использую старый ноутбук, который раньше работал таким образом, возможно, в старой версии ноутбука Jupyter.

Я протоколирование установить в качестве:

import logging 
logging.basicConfig(format='%(levelname)s : %(message)s', level=logging.INFO) 
logging.root.level = 20 

Но когда я тогда звоните:

logging.info("hello world") 

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

Я использую python 2.7.10 и установленные пакеты в моей виртуальной среде:

appnope==0.1.0 
backports-abc==0.4 
backports.ssl-match-hostname==3.5.0.1 
certifi==2016.2.28 
decorator==4.0.9 
functools32==3.2.3.post2 
gnureadline==6.3.3 
ipykernel==4.3.1 
ipython==4.1.2 
ipython-genutils==0.1.0 
ipywidgets==4.1.1 
Jinja2==2.8 
jsonschema==2.5.1 
jupyter==1.0.0 
jupyter-client==4.2.2 
jupyter-console==4.1.1 
jupyter-core==4.1.0 
MarkupSafe==0.23 
mistune==0.7.2 
nbconvert==4.1.0 
nbformat==4.0.1 
notebook==4.1.0 
path.py==8.1.2 
pexpect==4.0.1 
pickleshare==0.6 
ptyprocess==0.5.1 
Pygments==2.1.3 
pyzmq==15.2.0 
qtconsole==4.2.0 
simplegeneric==0.8.1 
singledispatch==3.4.0.3 
six==1.10.0 
terminado==0.6 
tornado==4.3 
traitlets==4.1.0 
wheel==0.24.0 

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

+0

Работы для меня. Я получаю красную рамку в записной книжке с информационным сообщением. С версией 4.0.1. –

+0

@ MikeMüller версия 4.0.1. какого пакета? IPython? – ziky90

+1

Да, IPython и jupyter 1.0.0 на Python 3.5. –

ответ

1

Я нашел один мой старый python 2.7.10 virtualenv где jupyter работает по своему желанию.

appnope==0.1.0 
backports.ssl-match-hostname==3.4.0.2 
boto==2.38.0 
bz2file==0.98 
certifi==2015.9.6.2 
decorator==4.0.4 
functools32==3.2.3.post2 
gensim==0.12.2 
gnureadline==6.3.3 
httpretty==0.8.6 
ipykernel==4.1.1 
ipython==4.0.0 
ipython-genutils==0.1.0 
ipywidgets==4.1.1 
Jinja2==2.8 
jsonschema==2.5.1 
jupyter==1.0.0 
jupyter-client==4.1.1 
jupyter-console==4.0.3 
jupyter-core==4.0.6 
MarkupSafe==0.23 
mistune==0.7.1 
nbconvert==4.1.0 
nbformat==4.0.1 
notebook==4.0.6 
numpy==1.10.1 
path.py==8.1.2 
Pattern==2.6 
pexpect==4.0.1 
pickleshare==0.5 
ptyprocess==0.5 
Pygments==2.0.2 
pyzmq==14.7.0 
qtconsole==4.1.0 
requests==2.8.1 
scipy==0.16.0 
simplegeneric==0.8.1 
six==1.10.0 
smart-open==1.3.0 
terminado==0.5 
tornado==4.2.1 
traitlets==4.0.0 
wheel==0.24.0 

Некоторые пакеты не связаны с jupyter проблемой здесь, проблема, вероятно, будет в версиях некоторых соответствующих пакетов. Я попробую еще раз выяснить, где именно.

EDIT:

В конце концов я обнаружил, что проблема находится в пакете: ipykernel==4.3.1 или так ipykernel==4.3.0 все работает отлично с ipykernel==4.1.1 или ipykernel==4.2.2.

Издание было сообщено на GitHub к jupyter и ipykernel: https://github.com/ipython/ipykernel/issues/111

7

Надеюсь jupyter люди будут это исправить. Тем не менее, я нашел обходное решение, которое вы можете использовать сейчас. Кажется, что, возможно, новые версии ноутбуков jupyter не показывают stderr в ноутбуке, но вместо этого отправляют stderr на терминал. Но они все еще печатают stdout. Вы можете установить обработчик корневого регистратора на стандартный вывод:

import logging 
import sys 

# Get root logger (all other loggers will be derived from this logger's 
# properties) 
logger = logging.getLogger() 
logger.warning("I will output to terminal") # No output in notebook, goes to terminal 

# assuming only a single handler has been setup (seems 
# to be default in notebook), set that handler to go to stdout. 
logger.handlers[0].stream = sys.stdout 

logger.warning("FOO") # Prints: WARNING:root:FOO 

# Other loggers derive from the root logger, so you can also do: 
logger2 = logging.getLogger("logger2") 
logger2.warning("BAR") # Prints: WARNING:logger2:BAR 

Если вы поместите это в верхней части вашего ноутбука, это изменение должно распространяться на любые лесозаготовители инициализируются в модулях вы импортируете как хорошо, так как обычно регистраторы унаследует настройка корневого регистратора.

0

Ни один из обходных решений, предложенных здесь, не работал для меня для меня, но нижнее, возможно, это поможет кому-то еще.

Использование python 3.4.3, jupyter-client == 4.1.1, jupyter-core == 4.0.6

import logging 
logger = logging.getLogger(__name__) 
logger.setLevel(logging.INFO) 

logger.info("hello") 

INFO: главный: привет

Смежные вопросы