New submission from switchnode: Consider the script:
$ cat nop.py #!/usr/bin/env python import fileinput srt = fileinput.input(inplace=True) print(srt.readline(), end='') for line in srt: print(line, end='') Called on text files, it will do nothing. $ ls -alh test.* -rw-r--r-- 1 501 utmp 1.3G Jun 18 22:17 test.mp4 -rw-r--r-- 1 501 utmp 71K Jun 18 2017 test.srt $ ./nop.py test.srt $ ls -alh test.* -rw-r--r-- 1 501 utmp 1.3G Jun 18 22:17 test.mp4 -rw-r--r-- 1 501 utmp 71K Jun 18 2017 test.srt However, if the user accidentally supplies the filename of a video instead of the associated srt... $ ./nop.py test.mp4 Traceback (most recent call last): File "./nop.py", line 4, in <module> print(srt.readline(), end='') File "/usr/lib/python3.6/fileinput.py", line 299, in readline line = self._readline() File "/usr/lib/python3.6/fileinput.py", line 364, in _readline return self._readline() File "/usr/lib/python3.6/codecs.py", line 321, in decode (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa3 in position 43: invalid start byte $ ls -alh test.* -rw-r--r-- 1 501 utmp 0 Jun 18 2017 test.mp4 -rw-r--r-- 1 501 utmp 71K Jun 18 2017 test.srt $ ls -alh * | grep 'bak' $ Oops! It is gone. I'm not sure why this happens. (Without the context-manager syntax, I would expect the program to end by excepting, fail to close the FileInput, and leave the backup file behind—certainly that would be the merciful option.) ---------- messages: 296304 nosy: switchnode priority: normal severity: normal status: open title: fileinput inplace clobbers file without leaving backup on decode errors type: behavior versions: Python 3.6 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue30700> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com