From: Georg Brandl Date: Sun, 13 Oct 2013 19:49:06 +0000 (+0200) Subject: Closes #17730: in code.interact(), when banner="", do not print anything. X-Git-Tag: v3.4.0a4~118 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fbc3c3c2bed34350e0dde4771805c51b80f2e410;p=thirdparty%2FPython%2Fcpython.git Closes #17730: in code.interact(), when banner="", do not print anything. Also adds tests for banner printing. --- diff --git a/Doc/library/code.rst b/Doc/library/code.rst index 56214b9f7227..d1f94755ee0b 100644 --- a/Doc/library/code.rst +++ b/Doc/library/code.rst @@ -132,12 +132,15 @@ interpreter objects as well as the following additions. .. method:: InteractiveConsole.interact(banner=None) - Closely emulate the interactive Python console. The optional banner argument + Closely emulate the interactive Python console. The optional *banner* argument specify the banner to print before the first interaction; by default it prints a banner similar to the one printed by the standard Python interpreter, followed by the class name of the console object in parentheses (so as not to confuse this with the real interpreter -- since it's so close!). + .. versionchanged:: 3.4 + To suppress printing any banner, pass an empty string. + .. method:: InteractiveConsole.push(line) diff --git a/Lib/code.py b/Lib/code.py index 9020aab70163..f8184b6c22e5 100644 --- a/Lib/code.py +++ b/Lib/code.py @@ -216,7 +216,7 @@ class InteractiveConsole(InteractiveInterpreter): self.write("Python %s on %s\n%s\n(%s)\n" % (sys.version, sys.platform, cprt, self.__class__.__name__)) - else: + elif banner: self.write("%s\n" % str(banner)) more = 0 while 1: diff --git a/Lib/test/test_code_module.py b/Lib/test/test_code_module.py index adef1701d46a..5fd21dc32c61 100644 --- a/Lib/test/test_code_module.py +++ b/Lib/test/test_code_module.py @@ -64,6 +64,20 @@ class TestInteractiveConsole(unittest.TestCase): self.console.interact() self.assertTrue(hook.called) + def test_banner(self): + # with banner + self.infunc.side_effect = EOFError('Finished') + self.console.interact(banner='Foo') + self.assertEqual(len(self.stderr.method_calls), 2) + banner_call = self.stderr.method_calls[0] + self.assertEqual(banner_call, ['write', ('Foo\n',), {}]) + + # no banner + self.stderr.reset_mock() + self.infunc.side_effect = EOFError('Finished') + self.console.interact(banner='') + self.assertEqual(len(self.stderr.method_calls), 1) + def test_main(): support.run_unittest(TestInteractiveConsole)