changeset: 102653:9410dc027505 user: Steven D'Aprano date: Mon Aug 15 04:14:33 2016 +1000 files: Doc/library/code.rst Lib/code.py Lib/test/test_code_module.py description: Issue27573 code.interact prints a message when exiting. diff -r 40b13da7f0f8 -r 9410dc027505 Doc/library/code.rst --- a/Doc/library/code.rst Mon Aug 15 02:47:49 2016 +1000 +++ b/Doc/library/code.rst Mon Aug 15 04:14:33 2016 +1000 @@ -147,6 +147,9 @@ .. versionchanged:: 3.4 To suppress printing any banner, pass an empty string. + .. versionchanged:: 3.6 + Now prints a brief message when exiting. + .. method:: InteractiveConsole.push(line) diff -r 40b13da7f0f8 -r 9410dc027505 Lib/code.py --- a/Lib/code.py Mon Aug 15 02:47:49 2016 +1000 +++ b/Lib/code.py Mon Aug 15 04:14:33 2016 +1000 @@ -230,6 +230,7 @@ self.write("\nKeyboardInterrupt\n") self.resetbuffer() more = 0 + self.write('now exiting %s...\n' % self.__class__.__name__) def push(self, line): """Push a line to the interpreter. diff -r 40b13da7f0f8 -r 9410dc027505 Lib/test/test_code_module.py --- a/Lib/test/test_code_module.py Mon Aug 15 02:47:49 2016 +1000 +++ b/Lib/test/test_code_module.py Mon Aug 15 04:14:33 2016 +1000 @@ -69,7 +69,7 @@ # with banner self.infunc.side_effect = EOFError('Finished') self.console.interact(banner='Foo') - self.assertEqual(len(self.stderr.method_calls), 2) + self.assertEqual(len(self.stderr.method_calls), 3) banner_call = self.stderr.method_calls[0] self.assertEqual(banner_call, ['write', ('Foo\n',), {}]) @@ -77,7 +77,15 @@ self.stderr.reset_mock() self.infunc.side_effect = EOFError('Finished') self.console.interact(banner='') - self.assertEqual(len(self.stderr.method_calls), 1) + self.assertEqual(len(self.stderr.method_calls), 2) + + def test_exit_msg(self): + self.infunc.side_effect = EOFError('Finished') + self.console.interact(banner='') + self.assertEqual(len(self.stderr.method_calls), 2) + err_msg = self.stderr.method_calls[1] + expected = 'now exiting InteractiveConsole...\n' + self.assertEqual(err_msg, ['write', (expected,), {}]) def test_cause_tb(self): self.infunc.side_effect = ["raise ValueError('') from AttributeError",