Issue #21075: fileinput.FileInput now reads bytes from standard stream if

binary mode is specified.  Patch by Sam Kimbrel.
This commit is contained in:
Serhiy Storchaka 2014-05-14 21:08:33 +03:00
parent e2d66903e8
commit 946cfc3e23
4 changed files with 17 additions and 2 deletions

View File

@ -320,7 +320,10 @@ class FileInput:
self._backupfilename = 0
if self._filename == '-':
self._filename = '<stdin>'
self._file = sys.stdin
if 'b' in self._mode:
self._file = sys.stdin.buffer
else:
self._file = sys.stdin
self._isstdin = True
else:
if self._inplace:

View File

@ -19,11 +19,12 @@ try:
except ImportError:
gzip = None
from io import StringIO
from io import BytesIO, StringIO
from fileinput import FileInput, hook_encoded
from test.support import verbose, TESTFN, run_unittest, check_warnings
from test.support import unlink as safe_unlink
from unittest import mock
# The fileinput module has 2 interfaces: the FileInput class which does
@ -232,6 +233,13 @@ class FileInputTests(unittest.TestCase):
finally:
remove_tempfiles(t1)
def test_stdin_binary_mode(self):
with mock.patch('sys.stdin') as m_stdin:
m_stdin.buffer = BytesIO(b'spam, bacon, sausage, and spam')
fi = FileInput(files=['-'], mode='rb')
lines = list(fi)
self.assertEqual(lines, [b'spam, bacon, sausage, and spam'])
def test_file_opening_hook(self):
try:
# cannot use openhook and inplace mode

View File

@ -674,6 +674,7 @@ Mads Kiilerich
Jason Killen
Jan Kim
Taek Joo Kim
Sam Kimbrel
W. Trevor King
Paul Kippes
Steve Kirsch

View File

@ -23,6 +23,9 @@ Core and Builtins
Library
-------
- Issue #21075: fileinput.FileInput now reads bytes from standard stream if
binary mode is specified. Patch by Sam Kimbrel.
- Issue #21396: Fix TextIOWrapper(..., write_through=True) to not force a
flush() on the underlying binary stream. Patch by akira.