Followup of #4705: we can't skip the binary buffering layer for stdin because FileIO doesn't have a read1() method
This commit is contained in:
parent
0302cf50eb
commit
27fe9fc448
|
@ -159,6 +159,16 @@ class CmdLineTest(unittest.TestCase):
|
||||||
self.assertEqual(data.strip(), b'x',
|
self.assertEqual(data.strip(), b'x',
|
||||||
"text %s not line-buffered" % stream)
|
"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():
|
def test_main():
|
||||||
test.support.run_unittest(CmdLineTest)
|
test.support.run_unittest(CmdLineTest)
|
||||||
|
|
|
@ -739,7 +739,12 @@ create_stdio(PyObject* io,
|
||||||
PyObject *line_buffering;
|
PyObject *line_buffering;
|
||||||
int buffering, isatty;
|
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;
|
buffering = 0;
|
||||||
else
|
else
|
||||||
buffering = -1;
|
buffering = -1;
|
||||||
|
@ -753,7 +758,7 @@ create_stdio(PyObject* io,
|
||||||
if (buf == NULL)
|
if (buf == NULL)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (!Py_UnbufferedStdioFlag) {
|
if (buffering) {
|
||||||
raw = PyObject_GetAttrString(buf, "raw");
|
raw = PyObject_GetAttrString(buf, "raw");
|
||||||
if (raw == NULL)
|
if (raw == NULL)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
Loading…
Reference in New Issue