From 7b3f0fa68e320253e7dc6987c54206272ffb182a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 4 Aug 2012 01:28:00 +0200 Subject: Close #13119: use "\r\n" newline for sys.stdout/err on Windows sys.stdout and sys.stderr are now using "\r\n" newline on Windows, as Python 2. --- Lib/test/test_cmd_line.py | 17 +++++++++++++++++ Misc/NEWS | 3 +++ Python/pythonrun.c | 13 ++++++++----- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py index 8c960b1..7644db2 100644 --- a/Lib/test/test_cmd_line.py +++ b/Lib/test/test_cmd_line.py @@ -259,6 +259,23 @@ class CmdLineTest(unittest.TestCase): "print(repr(input()))", b"'abc'") + def test_output_newline(self): + # Issue 13119 Newline for print() should be \r\n on Windows. + code = """if 1: + import sys + print(1) + print(2) + print(3, file=sys.stderr) + print(4, file=sys.stderr)""" + rc, out, err = assert_python_ok('-c', code) + + if sys.platform == 'win32': + self.assertEqual(b'1\r\n2\r\n', out) + self.assertEqual(b'3\r\n4', err) + else: + self.assertEqual(b'1\n2\n', out) + self.assertEqual(b'3\n4', err) + def test_unmached_quote(self): # Issue #10206: python program starting with unmatched quote # spewed spaces to stdout diff --git a/Misc/NEWS b/Misc/NEWS index 302c62c..9923ff3 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ What's New in Python 3.3.0 Beta 2? Core and Builtins ----------------- +- Issue #13119: sys.stdout and sys.stderr are now using "\r\n" newline on + Windows, as Python 2. + - Issue #15534: Fix the fast-search function for non-ASCII Unicode strings. - Issue #15508: Fix the docstring for __import__ to have the proper default diff --git a/Python/pythonrun.c b/Python/pythonrun.c index cafc09a..05dfb8e 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -971,12 +971,15 @@ create_stdio(PyObject* io, Py_CLEAR(raw); Py_CLEAR(text); - newline = "\n"; #ifdef MS_WINDOWS - if (!write_mode) { - /* translate \r\n to \n for sys.stdin on Windows */ - newline = NULL; - } + /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r" + newlines to "\n". + sys.stdout and sys.stderr: translate "\n" to "\r\n". */ + newline = NULL; +#else + /* sys.stdin: split lines at "\n". + sys.stdout and sys.stderr: don't translate newlines (use "\n"). */ + newline = "\n"; #endif stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssO", -- cgit v0.12