kernel = get_ipython().kernel
kernel._parent_header
{'buffers': [], 'content': {'allow_stdin': True, 'code': 'kernel._parent_header', 'silent': False, 'stop_on_error': True, 'store_history': True, 'user_expressions': {}}, 'header': {'date': '2016-10-11T11:30:07.988220', 'msg_id': '0DAA2B1585244A89979BFC7F296399D0', 'msg_type': 'execute_request', 'session': '249381749DEA42C89E8E4266F8D28FC5', 'username': 'username', 'version': '5.0'}, 'metadata': {}, 'msg_id': '0DAA2B1585244A89979BFC7F296399D0', 'msg_type': 'execute_request', 'parent_header': {}}
import sys
from contextlib import contextmanager
@contextmanager
def temp_parent(parent_ident, parent_header):
"""Context manager temporarily setting the parent header
for routing output to a particular cell
"""
save_parent = (kernel._parent_ident, kernel._parent_header)
sys.stdout.flush()
sys.stderr.flush()
kernel.set_parent(parent_ident, parent_header)
try:
yield
finally:
sys.stdout.flush()
sys.stderr.flush()
kernel.set_parent(*save_parent)
def from_this_cell(arg, *, show=print):
with temp_parent(*from_this_cell.target):
show(arg)
from_this_cell.target = (kernel._parent_ident, kernel._parent_header)
# workaround frontend:
# prevent the status:idle message from firing for this cell,
# because the frontend will discard callbacks once
# idle indicates that output is complete.
_save_status = kernel._publish_status
def _disable_once(*args, **kw):
kernel._publish_status = _save_status
kernel._publish_status = _disable_once
Up there!
print("I'm here")
from_this_cell("Up there!")
print("back")
I'm here back