bpo-1613500: Don't hardcode output file mode in fileinput.FileInput (… · python/cpython@be6dbfb (original) (raw)

Original file line number Diff line number Diff line change
@@ -222,6 +222,7 @@ def __init__(self, files=None, inplace=False, backup="", bufsize=0,
222 222 warnings.warn("'U' mode is deprecated",
223 223 DeprecationWarning, 2)
224 224 self._mode = mode
225 +self._write_mode = mode.replace('r', 'w') if 'U' not in mode else 'w'
225 226 if openhook:
226 227 if inplace:
227 228 raise ValueError("FileInput cannot use an opening hook in inplace mode")
@@ -348,14 +349,14 @@ def _readline(self):
348 349 try:
349 350 perm = os.fstat(self._file.fileno()).st_mode
350 351 except OSError:
351 -self._output = open(self._filename, "w")
352 +self._output = open(self._filename, self._write_mode)
352 353 else:
353 354 mode = os.O_CREAT | os.O_WRONLY os.O_TRUNC
354 355 if hasattr(os, 'O_BINARY'):
355 356 mode |= os.O_BINARY
356 357
357 358 fd = os.open(self._filename, mode, perm)
358 -self._output = os.fdopen(fd, "w")
359 +self._output = os.fdopen(fd, self._write_mode)
359 360 try:
360 361 os.chmod(self._filename, perm)
361 362 except OSError: