[Python-checkins] r68977 - in python/branches/py3k: Lib/test/test_cmd_line.py Python/pythonrun.c
antoine.pitrou
python-checkins at python.org
Mon Jan 26 22:48:00 CET 2009
Author: antoine.pitrou
Date: Mon Jan 26 22:48:00 2009
New Revision: 68977
Log:
Followup of #4705: we can't skip the binary buffering layer for stdin because FileIO doesn't have a read1() method
Modified:
python/branches/py3k/Lib/test/test_cmd_line.py
python/branches/py3k/Python/pythonrun.c
Modified: python/branches/py3k/Lib/test/test_cmd_line.py
==============================================================================
--- python/branches/py3k/Lib/test/test_cmd_line.py (original)
+++ python/branches/py3k/Lib/test/test_cmd_line.py Mon Jan 26 22:48:00 2009
@@ -159,6 +159,16 @@
self.assertEqual(data.strip(), b'x',
"text %s not line-buffered" % stream)
+ def test_unbuffered_input(self):
+ # sys.stdin still works with '-u'
+ code = ("import sys; sys.stdout.write(sys.stdin.read(1))")
+ p = _spawn_python('-u', '-c', code)
+ p.stdin.write(b'x')
+ p.stdin.flush()
+ data, rc = _kill_python_and_exit_code(p)
+ self.assertEqual(rc, 0)
+ self.assertEqual(data.strip(), b'x')
+
def test_main():
test.support.run_unittest(CmdLineTest)
Modified: python/branches/py3k/Python/pythonrun.c
==============================================================================
--- python/branches/py3k/Python/pythonrun.c (original)
+++ python/branches/py3k/Python/pythonrun.c Mon Jan 26 22:48:00 2009
@@ -739,7 +739,12 @@
PyObject *line_buffering;
int buffering, isatty;
- if (Py_UnbufferedStdioFlag)
+ /* stdin is always opened in buffered mode, first because it shouldn't
+ make a difference in common use cases, second because TextIOWrapper
+ depends on the presence of a read1() method which only exists on
+ buffered streams.
+ */
+ if (Py_UnbufferedStdioFlag && write_mode)
buffering = 0;
else
buffering = -1;
@@ -753,7 +758,7 @@
if (buf == NULL)
goto error;
- if (!Py_UnbufferedStdioFlag) {
+ if (buffering) {
raw = PyObject_GetAttrString(buf, "raw");
if (raw == NULL)
goto error;
More information about the Python-checkins
mailing list