Skip to content

Commit 62ad3c6

Browse files
committed
Suppress kernel startup stdout during execution
1 parent e4e4ddd commit 62ad3c6

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

papermill/clientwrap.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import asyncio
22
import sys
3+
from contextlib import redirect_stdout
4+
from io import StringIO
35

46
from nbclient import NotebookClient
57
from nbclient.exceptions import CellExecutionError
@@ -40,7 +42,7 @@ def execute(self, **kwargs):
4042
if sys.version_info[0] == 3 and sys.version_info[1] >= 8 and sys.platform.startswith('win'):
4143
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
4244

43-
with self.setup_kernel(**kwargs):
45+
with redirect_stdout(StringIO()), self.setup_kernel(**kwargs):
4446
self.log.info(f"Executing notebook with kernel: {self.kernel_name}")
4547
self.papermill_execute_cells()
4648
info_msg = self.wait_for_reply(self.kc.kernel_info())

papermill/tests/test_clientwrap.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import unittest
2+
from contextlib import contextmanager
3+
from io import StringIO
24
from unittest.mock import call, patch
35

46
import nbformat
@@ -37,3 +39,23 @@ def test_logging_data_msg(self):
3739
call("<matplotlib.figure.Figure at 0x7f830af7b350>"),
3840
]
3941
)
42+
43+
def test_kernel_startup_stdout_does_not_leak_to_parent_stdout(self):
44+
@contextmanager
45+
def noisy_kernel_setup(**kwargs):
46+
print("Starting kernel...")
47+
yield
48+
49+
self.client.kc = unittest.mock.Mock()
50+
self.client.kc.kernel_info.return_value = 'kernel-info'
51+
52+
with (
53+
patch.object(self.client, 'setup_kernel', noisy_kernel_setup),
54+
patch.object(self.client, 'papermill_execute_cells'),
55+
patch.object(self.client, 'wait_for_reply', return_value={'content': {'language_info': {}}}),
56+
patch.object(self.client, 'set_widgets_metadata'),
57+
patch('sys.stdout', new_callable=StringIO) as stdout,
58+
):
59+
self.client.execute()
60+
61+
self.assertEqual(stdout.getvalue(), "")

0 commit comments

Comments
 (0)