diff --git a/Lib/calendar.py b/Lib/calendar.py index 84aa3a429b4..0301d6b5d6c 100644 --- a/Lib/calendar.py +++ b/Lib/calendar.py @@ -636,7 +636,7 @@ def main(args): parser.add_option( "-e", "--encoding", dest="encoding", default=None, - help="Encoding to use for output" + help="Encoding to use for output." ) parser.add_option( "-t", "--type", @@ -662,10 +662,11 @@ def main(args): if encoding is None: encoding = sys.getdefaultencoding() optdict = dict(encoding=encoding, css=options.css) + write = sys.stdout.buffer.write if len(args) == 1: - print(cal.formatyearpage(datetime.date.today().year, **optdict)) + write(cal.formatyearpage(datetime.date.today().year, **optdict)) elif len(args) == 2: - print(cal.formatyearpage(int(args[1]), **optdict)) + write(cal.formatyearpage(int(args[1]), **optdict)) else: parser.error("incorrect number of arguments") sys.exit(1) @@ -687,9 +688,11 @@ def main(args): else: parser.error("incorrect number of arguments") sys.exit(1) + write = sys.stdout.write if options.encoding: result = result.encode(options.encoding) - print(result) + write = sys.stdout.buffer.write + write(result) if __name__ == "__main__": diff --git a/Lib/test/test_calendar.py b/Lib/test/test_calendar.py index 4bd758b641e..d3093ac9391 100644 --- a/Lib/test/test_calendar.py +++ b/Lib/test/test_calendar.py @@ -2,6 +2,7 @@ import calendar import unittest from test import support +from test.script_helper import assert_python_ok import time import locale @@ -451,6 +452,11 @@ class LeapdaysTestCase(unittest.TestCase): self.assertEqual(calendar.leapdays(1997,2020), 5) +class ConsoleOutputTestCase(unittest.TestCase): + def test_outputs_bytes(self): + (return_code, stdout, stderr) = assert_python_ok('-m', 'calendar', '--type=html', '2010') + self.assertEqual(stdout[:6], b'