changeset: 90707:7e640fefc9c1 branch: 3.4 parent: 90704:ddd7db7cf036 user: Serhiy Storchaka date: Wed May 14 21:08:33 2014 +0300 files: Lib/fileinput.py Lib/test/test_fileinput.py Misc/ACKS Misc/NEWS description: Issue #21075: fileinput.FileInput now reads bytes from standard stream if binary mode is specified. Patch by Sam Kimbrel. diff -r ddd7db7cf036 -r 7e640fefc9c1 Lib/fileinput.py --- a/Lib/fileinput.py Wed May 14 17:15:50 2014 +0200 +++ b/Lib/fileinput.py Wed May 14 21:08:33 2014 +0300 @@ -320,7 +320,10 @@ self._backupfilename = 0 if self._filename == '-': self._filename = '' - 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: diff -r ddd7db7cf036 -r 7e640fefc9c1 Lib/test/test_fileinput.py --- a/Lib/test/test_fileinput.py Wed May 14 17:15:50 2014 +0200 +++ b/Lib/test/test_fileinput.py Wed May 14 21:08:33 2014 +0300 @@ -19,11 +19,12 @@ 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 @@ 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 diff -r ddd7db7cf036 -r 7e640fefc9c1 Misc/ACKS --- a/Misc/ACKS Wed May 14 17:15:50 2014 +0200 +++ b/Misc/ACKS Wed May 14 21:08:33 2014 +0300 @@ -674,6 +674,7 @@ Jason Killen Jan Kim Taek Joo Kim +Sam Kimbrel W. Trevor King Paul Kippes Steve Kirsch diff -r ddd7db7cf036 -r 7e640fefc9c1 Misc/NEWS --- a/Misc/NEWS Wed May 14 17:15:50 2014 +0200 +++ b/Misc/NEWS Wed May 14 21:08:33 2014 +0300 @@ -23,6 +23,9 @@ 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.