Message296304
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.) |
|
Date |
User |
Action |
Args |
2017-06-19 04:14:47 | switchnode | set | recipients:
+ switchnode |
2017-06-19 04:14:47 | switchnode | set | messageid: <1497845687.86.0.210018987991.issue30700@psf.upfronthosting.co.za> |
2017-06-19 04:14:47 | switchnode | link | issue30700 messages |
2017-06-19 04:14:46 | switchnode | create | |
|