Commit 830207e8 authored by R David Murray's avatar R David Murray

#22709: Use stdin as-is if it does not have a buffer attribute.

This restores backward compatibility lost in the fix for #21075, and
is better duck typing.

Patch by Akira Li.
parent fcb6db50
...@@ -328,7 +328,7 @@ class FileInput: ...@@ -328,7 +328,7 @@ class FileInput:
if self._filename == '-': if self._filename == '-':
self._filename = '<stdin>' self._filename = '<stdin>'
if 'b' in self._mode: if 'b' in self._mode:
self._file = sys.stdin.buffer self._file = getattr(sys.stdin, 'buffer', sys.stdin)
else: else:
self._file = sys.stdin self._file = sys.stdin
self._isstdin = True self._isstdin = True
......
...@@ -240,6 +240,17 @@ class FileInputTests(unittest.TestCase): ...@@ -240,6 +240,17 @@ class FileInputTests(unittest.TestCase):
lines = list(fi) lines = list(fi)
self.assertEqual(lines, [b'spam, bacon, sausage, and spam']) self.assertEqual(lines, [b'spam, bacon, sausage, and spam'])
def test_detached_stdin_binary_mode(self):
orig_stdin = sys.stdin
try:
sys.stdin = BytesIO(b'spam, bacon, sausage, and spam')
self.assertFalse(hasattr(sys.stdin, 'buffer'))
fi = FileInput(files=['-'], mode='rb')
lines = list(fi)
self.assertEqual(lines, [b'spam, bacon, sausage, and spam'])
finally:
sys.stdin = orig_stdin
def test_file_opening_hook(self): def test_file_opening_hook(self):
try: try:
# cannot use openhook and inplace mode # cannot use openhook and inplace mode
......
...@@ -41,6 +41,9 @@ Core and Builtins ...@@ -41,6 +41,9 @@ Core and Builtins
Library Library
------- -------
- Issue #25447: fileinput now uses sys.stdin as-is if it does not have a
buffer attribute (restores backward compatibility).
- Issue #25447: Copying the lru_cache() wrapper object now always works, - Issue #25447: Copying the lru_cache() wrapper object now always works,
independedly from the type of the wrapped object (by returning the original independedly from the type of the wrapped object (by returning the original
object unchanged). object unchanged).
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment