New submission from David Herberth <pyt...@dav1d.de>:
_iomodule.c:_io_open_impl checks for isatty even if not necessary (when buffering >= 0). Code: https://github.com/python/cpython/blob/c0ee341b29bd7d978b49272a2c0e2dcfa77404d5/Modules/_io/_iomodule.c#L392 { PyObject *res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL); if (res == NULL) goto error; isatty = PyLong_AsLong(res); Py_DECREF(res); if (isatty == -1 && PyErr_Occurred()) goto error; } if (buffering == 1 || (buffering < 0 && isatty)) { buffering = -1; line_buffering = 1; } else line_buffering = 0; Python Code to reproduce: with open('foo', 'rb', buffering=0) as f: f.read() This generates an error (can be seen with strace): ioctl(5, TCGETS, 0x7ffef1435b60) = -1 ENOTTY (Inappropriate ioctl for device) I'll open a PR shortly. ---------- components: IO messages: 321281 nosy: Dav1d priority: normal severity: normal status: open title: Superfluous call to isatty in open() when buffering >= 0 type: performance versions: Python 3.6, Python 3.7, Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue34070> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com